2016-04-04 179 views
-1

我认为,当你有2条路由的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 /全:现在

"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方法, 有用。

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

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

回答