【发布时间】:2012-10-29 01:51:16
【问题描述】:
我有一个具有以下操作的 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 路由与自定义操作名称结合起来吗?
编辑:路由机制不会因控制器的选择而混淆。它对在单个控制器上选择 action 感到困惑。我需要的是在未指定任何操作时匹配默认操作。希望能澄清一些事情。
【问题讨论】:
-
看起来这可能会回答你的问题:stackoverflow.com/questions/9499794/…
-
@GiscardBiamby 感谢您提供的链接,我查看并尝试一下。
-
@GiscardBiamby 你肯定给我指出了正确的方向。这个答案:stackoverflow.com/a/12185249/99373 帮助我弄清楚了我需要做什么并且它奏效了!如果您想要信用,请发布答案,我会接受。
标签: c# asp.net-web-api asp.net-web-api-routing