Web-API-Routing - API / {Controller} / {Aktion} / {ID} „Fehlfunktionen“ API / {Controller} / {ID}
Ich habe die Standardroute in 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 abzuzielen, deshalb habe ich eine andere Route erstellt:
RouteTable.Routes.MapHttpRoute(
name: "WithActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional }
);
Also habe ich in meinem Controller:
public string Get(int id)
{
return "object of id id";
}
[HttpGet]
public IEnumerable<string> ByCategoryId(int id)
{
return new string[] { "byCategory1", "byCategory2" };
}
Berufung.../api/records/bycategoryid/5
werde mir geben was ich will. Rufen Sie jedoch an.../api/records/1
werde mir den fehler geben
Es wurden mehrere Aktionen gefunden, die der Anfrage entsprechen: ...
Ich verstehe, warum das so ist - die Routen definieren nur, welche URLs gültig sind, aber wenn es um die Funktionsübereinstimmung geht, beidesGet(int id)
undByCategoryId(int id)
Spielapi/{controller}/{id}
, welches ist wasverwirrt der Rahmen.
Was muss ich tun, damit die Standard-API-Route wieder funktioniert und die mit beibehalten wird?{action}
? Ich dachte daran, einen anderen Controller mit dem Namen zu erstellenRecordByCategoryIdController
um die Standard-API-Route, für die ich anfordern würde, zu entsprechen.../api/recordbycategoryid/5
. Ich finde jedoch, dass dies eine "schmutzige" (also unbefriedigende) Lösung ist. Ich habe nach Antworten zu diesem Thema gesucht und kein Tutorial zur Verwendung einer Route mit{action}
erwähnt sogar dieses Problem.