2016-04-04 20 views
-1

URLがリクエストに一致する2つのルートがある場合、属性ルーティングは指定された動詞に基づいてそれらを区別できません。属性ルーティングは動詞を無視していますか?

誰かが私になぜその問題を回避できるのか説明できますか?

まず、webapiconfigで、唯一のルートのマッチングに問題を回避するために、ルーティング属性を設定します:私は私の問題を再現するための非常に単純なWeb API 2プロジェクトが作成した

その後

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

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

を、我々はPOST/travelQueriesとGET/travelQueries/1

を呼び出すことができ、第1のコントローラ

[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" ; 
    } 
} 

を作成します

そして、第2のコントローラを作成:今

[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の間に競合があると判断することを意味します。

私は、これはバグであると思いますが、多分それはないと:)

答えて

0

これはグーグルがより正確になるように、私はちょうど質問を追加Web API 2 Attribute Routing Controller Selection

の複製である理由を誰かが私に教えてくれます質問の明示的なエラーメッセージのおかげで

関連する問題