【问题标题】:asp.net WebAPI Two controllers with same routes but different verbsasp.net Web API 两个具有相同路由但动词不同的控制器
【发布时间】:2017-03-10 08:21:45
【问题描述】:
我有两个控制器,每个控制器都有一个动作,它们都使用基于 url 的约定来处理动态请求。一个控制器处理 POST,另一个控制器处理 GET。两个控制器都标有[RoutePrefix("resource")],并且都有一个带有[Route("{resourceName}")] 的操作。在一个控制器上,动作被标记为[HttpPost],另一个被标记为[HttpGet]。但是,当我提出请求时,我收到错误:
找到多个与 URL 匹配的控制器类型
我猜这是因为两个控制器都有匹配 source/*anything* 的路由,并且路由不会费心检查动词 - 如果我将两个操作放在一个控制器中,一切都会按预期工作。如果可能的话,我宁愿将它们分开 - 是否可以配置路由,以便一个处理程序可用于 POST,一个用于 GET,而不会发生冲突?
【问题讨论】:
标签:
c#
asp.net
asp.net-web-api
routing
【解决方案1】:
您是正确的,两个控制器都有匹配的路由,这会导致冲突。如果计划只是将代码分开,请使用部分类。
MyController.cs
[RoutePrefix("resource")]
public partial class MyController : ApiController { ... }
MyController_Get.cs
public partial class MyController {
//GET resource/resourceName
[HttpGet]
[Route("{resourceName}")]
public IHttpActionResult Get() { ... }
}
MyController_Post.cs
public partial class MyController {
//POST resource/resourceName
[HttpPost]
[Route("{resourceName}")]
public IHttpActionResult Post() { ... }
}