2016-04-04 177 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之間存在衝突。

,我認爲這是一個錯誤,但也許這是不是會有人告訴我,爲什麼:)

回答