Dispongo di un APIController API 2.2 Web side-by-side e ODataV4 ODataController. Il mio APIController utilizza attributi di routing internamente come questo (non ci sono impostazioni predefinite di routing predefinite):Prefisso di routing OData v4?
[RoutePrefix("api")]
public class MyController : ApiController
{
[HttpGet]
[Route("My")]
public IHttpActionResult Get()
{
//Code Here
}
[HttpGet]
[Route("My")]
public IHttpActionResult Get([FromUri] String mykey)
{
//Code Here
}
}
e come tali vengono indirizzate al attraverso ./api/My e ./api/My/?mykey=value
e ho provato ad installare il mio ODataController a seguire una tuta simile con:
[ODataRoutePrefix("My")]
public class oMyController : ODataController {
[HttpGet]
public IHttpActionResult Get(ODataQueryOptions<FileModel> queryOptions) {
//Code Here
}
[HttpGet]
[ODataRoute("({mykey})")]
public IHttpActionResult Get([FromODataUri] String mykey) {
//Code Here
}
}
definendo percorso odata prima del tempo come questo:
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<MyModel>("My");
config.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: "odata",
model: builder.GetEdmModel()
);
ma tenta di accedere ./odata/My e ./odata/My(value) finiscono nel mio APIController invece di ODataController.
Come è possibile eseguire il routing utilizzando i diversi prefissi, ma lo stesso nome, e portarli ai controller appropriati. Non voglio avere un nome diverso per ogni percorso se posso impedirlo, i prefissi dovrebbero occuparsi di tutto, ma per qualche motivo non lo sono.
In quello spazio dei nomi 'ODataRoute' è trovato! Non riesco a trovarlo –
ODataRoute si trovava nello spazio dei nomi System.Web.Http.OData.Routing, ma è stato dichiarato obsoleto. La nuova casa è sotto lo spazio dei nomi System.Web.OData.Routing, che puoi ottenere come parte del pacchetto nuget Microsoft.AspNet.OData. – Xorcist