2015-04-07 13 views
7

Ich habe eine Seite-an-Seite Web API 2.2 APIController und OData v4 ODataController. My APIController verwendet Routing intern wie diese Attribute (es gibt keine vordefinierten Routing Defaults):OData v4 Routing-Präfix?

[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 
    } 
    } 

und werden als solche geroutet durch ./api/My und ./api/My/?mykey=value

und ich habe versucht, meine ODataController Einrichtung mit einer ähnlichen Klage folgen:

[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 
    } 
    } 

definieren OData Strecke vor der Zeit wie folgt aus:

ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); 
    builder.EntitySet<MyModel>("My"); 
    config.MapODataServiceRoute(
    routeName: "ODataRoute", 
    routePrefix: "odata", 
    model: builder.GetEdmModel() 
); 

, aber Versuche, auf ./odata/My und ./odata/My(value) zuzugreifen, landen in meinem APIController anstelle des ODataControllers.

Wie kann ich diese unter Verwendung der verschiedenen Präfixe, aber den gleichen Namen, und lassen Sie sie zu den entsprechenden Controllern gehen. Ich möchte nicht für jede Route einen anderen Namen haben, wenn ich das verhindern kann, die Präfixe sollten sich um alles kümmern, aber aus irgendeinem Grund nicht.

+0

In welchem ​​Namespace 'ODataRoute' gefunden wird! Ich kann es nicht finden –

+0

ODataRoute war früher im System.Web.Http.OData.Routing-Namespace, aber das ist veraltet. Das neue Home befindet sich im System.Web.OData.Routing-Namespace, den Sie als Teil des nuget-Pakets Microsoft.AspNet.OData erhalten können. – Xorcist

Antwort

7

Wow, ich fühle mich ein bisschen albern. 20 Minuten nach der Veröffentlichung löse ich es. Kurz und knapp, ich brauchte das ODataRoute Attribut angeben tatsächlich zu, auch wenn es leer ist, so meine neue ODataController, die Arbeit der Fall ist, sieht wie folgt aus:

[ODataRoutePrefix("My")] 
public class oMyController : ODataController { 

    [HttpGet] 
    [ODataRoute()] // <---<< This was the key to proper OData routing 
    public IHttpActionResult Get(ODataQueryOptions<FileModel> queryOptions) { 
    //Code Here 
    } 

    [HttpGet] 
    [ODataRoute("({mykey})")] 
    public IHttpActionResult Get([FromODataUri] String mykey) { 
    //Code Here 
    } 

} 
Verwandte Themen