Geben Sie der Basis-URL des OData-Service-Dokuments einen abschließenden Schrägstrich in WebApi OData

Wie kann ich das Basis-URL-Attribut im Stammelement eines OData-Servicedokuments steuern?

Ich richte einen OData-Dienst mit WebApi ein, demSystem.Web.Http.OData.Builder.ODataConventionModelBuilder und Controller, die von erbenSystem.Web.Http.OData.ODataController

Es funktioniert alles wunderbar und Excel 2013 greift problemlos auf die Daten zu.

Das Problem tritt auf, wenn Sie versuchen, Excel 2010 und PowerPivot zu verwenden. Mir ist bewusst, dassFix Bei Antworten im JSON-Format, die ohne Accept-Header gesendet wurden, kann ich keine Diskussion über Probleme mit der Basis-URL finden.

Ich habe meine Odata Route mit eingerichtetconfig.Routes.MapODataRoute("odata", "odata", builder.GetEdmModel()); und wenn ich diese URL drücke, bekomme ich eine Antwort von<service xml:base="http://localhost/odata" xmlns="http://www.w3.org/2007/app" xmlns:atom="http://www.w3.org/2005/Atom"/>

Excel 2010 + PowerPivot liest diese URL und entscheidet, dass Auflistungen mit URIs im Stammverzeichnis angefordert werden sollen, z.http://localhost/Products Anstatt vonhttp://localhost/odata/Products so wie es sollte.

Ich habe meinen Verdacht bestätigt, indem ich auf eine statische Version des Servicedokuments zugegriffen habe, die so geändert wurde, dass der abschließende Schrägstrich zum Basisattributwert hinzugefügt wird, und anschließend die richtige URL für die Sammlungsressource angefordert wird.

Ich habe versucht, den ASP.Net WebStack-Quellcode durchzuarbeiten, um festzustellen, ob ich einen Formatierer oder etwas anderes überschreiben kann, bin aber verloren gegangen. Anregungen wäre sehr dankbar.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage