我在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)
比赛api/{controller}/{id}
,这是混淆了框架。
我需要怎么做才能使默认的API路由再次起作用,并与之保持联系{action}
?我想创建一个名称RecordByCategoryIdController
与默认API路由匹配的控制器,我将向其请求.../api/recordbycategoryid/5
。但是,我发现这是一个“肮脏的”(因此不令人满意)的解决方案。我一直在寻找答案,没有关于使用路由{action}
甚至提到该问题的教程。