2016-04-04 16 views
-1

URL'si bir istekle eşleşen 2 rotanız olduğunda, yönlendirme yönlendirmesinin belirtilen fiile göre ayırt edilemediğini düşünüyorum.Öznitelik yönlendirme fiili dikkate almıyor mu?

Birisi bana neden ve bu sorunu nasıl önleyebileceğimi açıklayabilir mi?

benim sorunu yeniden için çok basit bir web api 2 projeyi oluşturduk:

Öncelikle webapiconfig içinde, sadece nitelik rota eşleme ile herhangi bir sorun önlemek için yönlendirme yapılandırın: Sonra

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

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

, biz POST/travelQueries çağrı ve/travelQueries/1

GET olabilir

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

birinci kontrolör yaratır

Sonra ikinci bir denetleyicisi oluşturmak: Şimdi

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

yapabilirsiniz değil çağrı POST/travelQueries/tam: Eğer yorum yaparsanız

"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" 

Şimdi/TravelQueriesController.Get2 yöntemini kaldırın , işe yarıyor.

Bu, her iki URL de eşleştiğinde, bir HttpGet ile bir HttpPost arasında bir çakışma olduğunu Asp.Net WEB API 2'nin çözdüğü anlamına gelir.

Bunun bir hata olduğunu düşünüyorum, ama belki de değildir ve :)

cevap

İlgili konular