Um die Schritte zusammenzufassen, die ziemlich einfach sind, ohne ein Beispiel herunterladen zu müssen, nuget Microsoft.AspNet.WebApi.Odata für v3 und Microsoft.AspNet.OData für v4. Beginnend mit v3 und v4, die mit Standardkonventionen verdrahtet sind, erhalten Sie einen doppelten Controller-Namen. Von hier aus ändern Sie das Standard-Routenpräfix v3 auf "odata/v3" (nicht erforderlich, aber empfohlen), und für v4 setzen Sie das Standard-Routenpräfix auf "odata/v4" und benennen Sie Ihren Controller in MyEntityV4Controller um. An diesem Punkt führt der Versuch, Routenattribute zur Lösung des Fehlers zu verwenden, zu einem http 406-Ergebnis. Erstellen Sie stattdessen eine Klasse:
public class CustomControllerRoutingConvention : IODataRoutingConvention
{
public string SelectAction(ODataPath odataPath, HttpControllerContext controllerContext, ILookup<string, HttpActionDescriptor> actionMap)
{
return null;
}
public string SelectController(ODataPath odataPath, HttpRequestMessage request)
{
if (odataPath.EdmType == null)
return null;
var path = odataPath.Segments.OfType<EntitySetPathSegment>().SingleOrDefault();
if (path == null)
{
return null;
}
return path.EntitySetName + "V4";
}
}
Und es verwenden, wie so:
config.MapODataServiceRoute(
"odatav4",
"odata/v4",
builder.GetEdmModel(),
new DefaultODataPathHandler(),
routingConventions);
Von hier aus können Sie zu OData/v3/MyEntitys und OData/v4/MyEntitys durchsuchen usw.
Nur einen Link zu ASP.Net Problem zu diesem Problem und Code-Duplizierung https://aspnetwebstack.codeplex.com/workitem/2184 – Marty