asp.net WebAPI两个具有相同路由但动词不同的控制器

时间:2016-10-27 15:07:31

标签: c# asp.net asp.net-web-api routing

我有两个控制器,每个控制器只有一个动作,并且认为它们都使用基于url的约定来处理动态请求。一个控制器处理POST,另一个处理GET。两个控制器都标有[RoutePrefix("resource")],并且都有[Route("{resourceName}")]的单个操作。在一个控制器上,操作标记为[HttpPost],另一个[HttpGet]。但是,当我提出请求时,我收到错误:

  

找到了与网址匹配的多种控制器类型

我猜测这是因为两个控制器都有匹配source/*anything*的路由,并且路由不会检查动词 - 如果我将两个动作放在一个控制器中,一切都可以正常工作预期。如果可能的话,我宁愿将它们分开 - 是否可以配置路由以便一个处理程序可用于POST,一个用于GET,而不会发生冲突?

1 个答案:

答案 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() { ... }
}