Routing Web API - api / {controller} / {action} / {id} „dysfunctions” api / {controller} / {id}

Mam domyślną trasę w Global.asax:

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

Chciałem móc celować w określoną funkcję, więc stworzyłem inną trasę:

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

W moim kontrolerze mam:

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

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

Powołanie.../api/records/bycategoryid/5 da mi to, czego chcę. Jednak dzwoni.../api/records/1 da mi błąd

Znaleziono wiele działań odpowiadających żądaniu: ...

Rozumiem, dlaczego tak jest - trasy po prostu definiują, które adresy URL są poprawne, ale jeśli chodzi o dopasowanie funkcji, obaGet(int id) iByCategoryId(int id) meczapi/{controller}/{id}, które są Czymmyli ramy.

Co muszę zrobić, aby ponownie uruchomić domyślną trasę API i zachować tę z{action}? Myślałem o stworzeniu innego kontrolera o nazwieRecordByCategoryIdController aby dopasować domyślną trasę API, o którą bym prosił.../api/recordbycategoryid/5. Uważam jednak, że jest to „brudne” (a więc niezadowalające) rozwiązanie. Szukałem odpowiedzi na ten temat i żadnego tutoriala na temat korzystania z trasy{action} nawet wspomina o tym problemie.

questionAnswers(4)

yourAnswerToTheQuestion