我想创建以下API:
/ API /验证/ 1
/ API /验证/调用getFoo / 1
控制器方法:
public string Get(int id)
{
return "value";
}
public string GetFoo(int id)
{
return "value";
}
WebApiConfig:
config.Routes.MapHttpRoute("DefaultApiWithId", "Api/{controller}/{id}", new { id = RouteParameter.Optional }, new { id = @"\d+" });
config.Routes.MapHttpRoute("DefaultApiWithAction", "Api/{controller}/{action}/{id}", new { id = RouteParameter.Optional });
使用此配置我可以访问/api/verifications/getfoo/1
,但/api/verifications/1
会导致异常:找到与请求匹配的多个操作。
如何配置路由以使用默认的Get和命名的Get方法?
答案 0 :(得分:2)
我认为你只需要为第一条路线指定action
。 e.g:
config.Routes.MapHttpRoute("DefaultApiWithId", "Api/{controller}/{id}", new { action = "Get", id = RouteParameter.Optional }, new { id = @"\d+" });
答案 1 :(得分:0)
在这里,您忽略了操作名称的标准命名约定。通常Get
方法绑定请求没有参数来返回所有可用项。至于我,最好为每个操作定义不同的特定名称,例如GetOneKindOfThings
和GetOtherKindOfThings
,以使您的API更具自我描述性。
无论如何,您可以使用以下技巧让框架正确理解您的路线:
public string Get(int defaultId)
{
return "value";
}
public string GetFoo(int id)
{
return "value";
}
config.Routes.MapHttpRoute("DefaultApiWithId", "Api/{controller}/{defaultId}", new { defaultId = RouteParameter.Optional }, new { id = @"\d+" });
config.Routes.MapHttpRoute("DefaultApiWithAction", "Api/{controller}/{action}/{id}", new { id = RouteParameter.Optional });