我有一个具有以下操作的 Web API 控制器:
[HttpPut]
public string Put(int id, JObject data)
[HttpPut, ActionName("Lock")]
public bool Lock(int id)
[HttpPut, ActionName("Unlock")]
public bool Unlock(int id)
并映射了以下路线:
routes.MapHttpRoute(
name: "Api",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
routes.MapHttpRoute(
name: "ApiAction",
routeTemplate: "api/{controller}/{action}/{id}"
);
当我提出以下请求时,一切都按预期工作:
PUT /api/items/Lock/5
PUT /api/items/Unlock/5
但是当我尝试提出请求时:
PUT /api/items/5
我得到以下异常:
Multiple actions were found that match the request:
Put(int id, JObject data)
Lock(int id)
Unlock(int id)
我尝试向默认路由添加一个空操作名称,但这没有帮助:
[HttpPut, ActionName("")]
public string Put(int id, JObject data)
有什么想法可以将默认的 RESTful 路由与自定义操作名称结合起来吗?
编辑:路由机制不会因控制器的选择而混淆。它对单个控制器上的操作选择感到困惑。我需要的是在未指定任何操作时匹配默认操作。希望能澄清事情。