【问题标题】: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() { ... }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-30
      • 2014-10-07
      • 2017-03-12
      • 2019-01-18
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多