0

Ich bin das OData V4 Update Blog zu lesen: https://blogs.msdn.microsoft.com/webdev/2014/03/13/getting-started-with-asp-net-web-api-2-2-for-odata-v4-0/OData-Attribut-Routing: ein Controller für mehrere Datentypen

Er erwähnt die neu hinzugefügte [ODataRoute] Attribut für Attribut-Routing. Im herkömmlichen WebApiController kann ich die Routen unter Verwendung der Attribute [Route] für mehrere Typen angeben. Zum Beispiel sagen, ich habe zwei Klassen Reisen und Hotel. Ich kann durch eine Steuerung für beide von ihnen haben:

public class DefaultController : WebApiController { 
[Route("travel/{id}")] 
[Route("hotel/{id}")] 
public HttpResponseMessage Get(int id) 
{ 
    // Implementation here 
} 

Mit OData Stapel, wobei jeder Datentyp einen Controller standardmäßig gebunden ist, was bedeutet, ich brauche zwei Controller:

public class TravelController : ODataController{ } 

public class HotelController : ODataController{ } 

So gibt es eine Möglichkeit, mehrere Datentypen mit ODataController und ODataRoute auf einen Controller zu routen? (Ich habe versucht, einfach zu ersetzen [Route] mit [ODataRoute], aber es hat nicht funktioniert)

Antwort

2

Sie können wie folgt tun,

public class MyController : ODataController 

{ 
    [HttpGet] 
    [ODataRoute("Airlines({id})")] 
    [ODataRoute("People({id})")] 
    public IHttpActionResult Get([FromODataUri] string id) 
    { 
     return Ok("Empty"+id); 
    } 
} 

ich dies überprüfen, es funktioniert gut, und notieren Sie den Namen Controller ist nicht Beginnen Sie mit dem Namen eines Entitätssatzes.

Auch wenn Sie keinen Controller schreiben möchten, können Sie auf diese Bibliothek zugreifen http://odata.github.io/RESTier/, die einzelne vordefinierte Controller verwenden, um alle Anfragen zu behandeln.