在c#web api 2.0中发现多个控制器类型错误

时间:2016-07-05 05:37:54

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

为什么这不起作用?我收到错误:System.InvalidOperationException:找到了与URL匹配的多个控制器类型。如果多个控制器上的属性路由与请求的URL匹配,则会发生这种情况。

public class ConfigUpdateController: ApiController
{
    [HttpPut]
    [Route("api/device/{serial}/config")]
    public IHttpActionResult Update(
        [FromUri] string serial,
        [FromBody] Configuration configuration)
    {

    }
}

public class ConfigQueryController: ApiController
{
    [HttpGet]
    [Route("api/device/{serial}/config")]
    public IHttpActionResult Get(
        [FromUri] string serial)
    {

    }
}

我想在单独的控制器中使用相同资源的方法的原因是将查询与命令分离。

修改

老实说,这是一个充足的代码来说明我的问题,所以请不要费心评论控制器命名等。在我的问题中,这并不重要。

编辑2

我在这里发现web-api overview路由有3个阶段:

  

路由有三个主要阶段:   将URI与路由模板匹配。   选择一个控制器。   选择一个动作。

所以看起来这不起作用,因为无法解析控制器,甚至没有检查方法动词(PUT,GET)? O_O

2 个答案:

答案 0 :(得分:0)

仔细阅读错误,然后查看属性路由。您有两个不同操作的相同URL。 程序不知道要执行哪个动作。

答案 1 :(得分:0)

使用[FromRoute]代替[FromUri]注释