属性路由忽略动词?

时间:2016-04-04 07:55:01

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

我认为当你有两条URL匹配请求的路由时,属性路由无法根据指定的动词来区分它们。

有人可以解释我为什么以及如何避免这个问题?

我创建了一个非常简单的web api 2项目来重现我的问题:

首先,在webapiconfig中,仅配置属性路由以避免路由匹配出现任何问题:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();            
    }
}

然后,创建第一个控制器

[RoutePrefix("travelQueries")]
public class TravelQueriesController : ApiController
{
    [Route("", Name = "test1")]
    [HttpPost]
    public IEnumerable<string> Get()
    {
        return new string[] { "value1" };
    }

    [Route("{id}", Name = "test1read")]
    [HttpGet]
    public string Get2()
    {
        return "value1" ;
    }
}

我们可以调用POST / travelQueries和GET / travelQueries / 1

然后,创建第二个控制器:

[RoutePrefix("travelQueries")]
public class TravelQueriesFullController : ApiController
{
    [Route("full", Name = "test2")]
    [HttpPost]
    public IEnumerable<string> Get()
    {
        return new string[] { "value2" };
    }        
}

现在,你可以调用POST / travelQueries / full:

"Multiple controller types were found that match the URL. This can happen if attribute routes on multiple controllers match the requested URL.

The request has found the following matching controller types:   

WebApplication1.Controllers.TravelQueriesController

WebApplication1.Controllers.TravelQueriesFullController"

现在,如果你评论/删除TravelQueriesController.Get2方法,它就可以了。

这意味着Asp.Net WEB API 2认为当两个网址匹配时,HttpGet和HttpPost之间存在冲突。

我认为这是一个错误,但也许不是,有人会告诉我原因:)

1 个答案:

答案 0 :(得分:0)

这是Web API 2 Attribute Routing Controller Selection

的副本

我刚刚添加了问题,因为问题中的显式错误消息可能会更正确Google搜索