Global.asax에 기본 경로가 있습니다.
RouteTable.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional }
);
특정 기능을 대상으로 할 수 있기를 원했기 때문에 다른 경로를 만들었습니다.
RouteTable.Routes.MapHttpRoute(
name: "WithActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional }
);
따라서 내 컨트롤러에는 다음이 있습니다.
public string Get(int id)
{
return "object of id id";
}
[HttpGet]
public IEnumerable<string> ByCategoryId(int id)
{
return new string[] { "byCategory1", "byCategory2" };
}
전화 .../api/records/bycategoryid/5
하면 내가 원하는 것을 얻을 수 있습니다. 그러나 전화 .../api/records/1
하면 오류가 발생합니다.
요청과 일치하는 여러 작업이 발견되었습니다. ...
그 이유를 이해합니다. 경로는 유효한 URL을 정의하지만 함수 일치에 관해서는 둘 다 Get(int id)
및 ByCategoryId(int id)
match api/{controller}/{id}
, 이것이 프레임 워크를 혼란스럽게 합니다.
기본 API 경로를 다시 작동하고 경로를 유지하려면 {action}
어떻게해야합니까? RecordByCategoryIdController
기본 API 경로와 일치 하도록 이름이 다른 컨트롤러를 만드는 것을 생각했습니다 .../api/recordbycategoryid/5
. 그러나 나는 그것이 "더러운"(따라서 불만족스러운) 해결책이라는 것을 알게되었다. 나는 이것에 대한 답변을 {action}
찾았고이 문제를 언급 하는 경로 사용에 대한 자습서가 없습니다 .