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.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage