Per riepilogare i passaggi che sono abbastanza semplici senza dover scaricare un campione, nuget Microsoft.AspNet.WebApi.Odata per v3 e Microsoft.AspNet.OData per v4. A partire da v3 e v4 cablati con convenzioni predefinite, verrà trovato un nome controller duplicato. Da qui, modificare il prefisso del percorso predefinito v3 su "odata/v3" (non richiesto ma consigliato) e, per v4, impostare il prefisso del percorso predefinito su "odata/v4" e rinominare il controller su MyEntityV4Controller. A questo punto, il tentativo di utilizzare gli attributi di percorso per risolvere l'errore porterà a un risultato http 406. Invece, creare una classe:
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";
}
}
e usarlo come modo:
config.MapODataServiceRoute(
"odatav4",
"odata/v4",
builder.GetEdmModel(),
new DefaultODataPathHandler(),
routingConventions);
Da qui sarete in grado di navigare a odata/v3/MyEntitys e odata/v4/MyEntitys, etc.
fonte
2015-06-18 22:57:49
Pubblicare semplicemente un collegamento al problema ASP.Net su questo problema e la duplicazione del codice https://aspnetwebstack.codeplex.com/workitem/2184 – Marty