Web-API-Routing - api / {Controller} / {Aktion} / {ID} "Dysfunktionen" api / {Controller} / {ID}

Habe ich die Standard-Route in der Global.asax:

 RouteTable.Routes.MapHttpRoute(
         name: "DefaultApi",
         routeTemplate: "api/{controller}/{id}",
         defaults: new { id = System.Web.Http.RouteParameter.Optional }
         );

Ich wollte in der Lage sein, auf eine bestimmte Funktion, so habe ich eine andere route:

RouteTable.Routes.MapHttpRoute(
         name: "WithActionApi",
         routeTemplate: "api/{controller}/{action}/{id}",
         defaults: new { id = System.Web.Http.RouteParameter.Optional }
         );

So, in meinem controller habe ich:

    public string Get(int id)
    {
        return "object of id id";
    }        

    [HttpGet]
    public IEnumerable<string> ByCategoryId(int id)
    {
        return new string[] { "byCategory1", "byCategory2" };
    }

Aufrufen .../api/records/bycategoryid/5 wird mir geben, was ich will.
Allerdings ruft .../api/records/1 wird mir der Fehler

Mehrere Maßnahmen gefunden wurden, die mit dem Wunsch: ...

Verstehe ich, warum das so ist - die Routen, die Sie nur die definieren, welche URLs gültig sind, aber wenn es um die matching-Funktion, die beide Get(int id) und ByCategoryId(int id) match api/{controller}/{id}was verwirrt Rahmen.

Was muss ich tun, um den Standard-API-route wieder zu arbeiten, und halten Sie die ein mit {action}? Ich dachte, der Erstellung einer anderen Domänencontroller mit dem Namen RecordByCategoryIdController entsprechend der Standard-API-route, für die ich bitten .../api/recordbycategoryid/5. Allerdings finde ich, dass das eine "schmutzige" (und damit unbefriedigende) Lösung. Ich habe nach Antworten gesucht auf diese und keine Anleitung vorhanden ist, mit einer route mit {action} einmal erwähnt dieses Problem.

InformationsquelleAutor der Frage Mickael Caruso | 2012-11-28

Schreibe einen Kommentar