我有两个控制器,每个控制器只有一个动作,并且认为它们都使用基于url的约定来处理动态请求。一个控制器处理POST,另一个处理GET。两个控制器都标有[RoutePrefix("resource")]
,并且都有[Route("{resourceName}")]
的单个操作。在一个控制器上,操作标记为[HttpPost]
,另一个[HttpGet]
。但是,当我提出请求时,我收到错误:
找到了与网址匹配的多种控制器类型
我猜测这是因为两个控制器都有匹配source/*anything*
的路由,并且路由不会检查动词 - 如果我将两个动作放在一个控制器中,一切都可以正常工作预期。如果可能的话,我宁愿将它们分开 - 是否可以配置路由以便一个处理程序可用于POST,一个用于GET,而不会发生冲突?
答案 0 :(得分:2)
您是正确的两个控制器都有匹配的路由导致冲突。如果计划只是为了保持代码分开,请使用部分类。
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() { ... }
}