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の間に競合があると判断することを意味します。
私は、これはバグであると思いますが、多分それはないと:)