2016-10-18 4 views
1

라우팅과 관련하여 도움이 될만한 사람이 있습니까? 에서동일한 유형의 매개 변수로 다른 GET 메소드를 실행하기위한 라우팅

config.Routes.MapHttpRoute(DefaultApi", 
    routeTemplate: "{controller}/{uid}", 
    defaults: new {uid = RouteParameter.Optional} 
); 

와 컨트롤러

[RoutePrefix("AppartmentCategory")] 
public class AppartmentCategoryController : ApiController 
{ 
    [HttpGet] 
    public IHttpActionResult Get(Guid uid){...} 

    [HttpGet] 
    [Route("{propertyUid?}")] 
    public IHttpActionResult GetList(Guid propertyUid){...} 
} 

의 두 가지 방법은 내가 요청

1. http://.../AppartmentCategory/043F61D1-7194-E611-A98B-9C5C8E0005FA 

를 보내려고하면 나는이 매핑이
WebApiConfig 방법 공공 IHttpActionResult GetList (GUID propertyUid)를 실행하는 두 가지 경우 모두 617,451,515,
2. http://.../AppartmentCategory/?propertyUid=2fdc968d-0192-e611-a98b-9c5c8e0005fa 

내가 먼저 요청 공공 IHttpActionResult 받기 GUID (UID) 방법을 실행하기위한 해결 놈이야 무엇입니까?

+0

규칙 기반 라우팅과 속성 라우팅을 혼합합니다. 'config.MapHttpAttributeRoutes()'는 대회 루트 이전에 매핑되어 있으므로 (GetLists) 먼저 공격을합니다. 기술적으로 두 가지 동작 모두 비슷한 경로를 사용합니다. 두 가지 동작을 조금 더 차별화해야합니다. – Nkosi

답변

1

규칙 기반 라우팅과 속성 라우팅을 혼합합니다. config.MapHttpAttributeRoutes()는 그래서 명중 것이다 (예상대로)

config.MapHttpAttributeRoutes(); 

config.Routes.MapHttpRoute(DefaultApi", 
    routeTemplate: "{controller}/{uid}", 
    defaults: new {uid = RouteParameter.Optional} 
); 

규칙 기반 라우팅하기 전에 매핑되는 GetLists 첫 번째 템플릿을 일치시킬 때 첫 경기는 항상 승리한다. 기술적으로 두 가지 동작 모두 비슷한 경로를 사용합니다.

[RoutePrefix("AppartmentCategory")] 
public class AppartmentCategoryController : ApiController 
{ 
    //GET AppartmentCategory/043F61D1-7194-E611-A98B-9C5C8E0005FA VIA CONVENTION-BASED ROUTING 
    [HttpGet] 
    public IHttpActionResult Get(Guid uid){...} 

    //GET AppartmentCategory/2fdc968d-0192-e611-a98b-9c5c8e0005fa VIA ATTRIBUTE ROUTING  
    [HttpGet] 
    [Route("{propertyUid?}")] 
    public IHttpActionResult GetList(Guid propertyUid){...} 
} 

당신은 규칙 기반 및 속성이 동일한 컨트롤러에서 라우팅을 혼합하지 않도록 노력 또한 두 가지 작업이 좀 더 차별화를 시도해야한다.

[RoutePrefix("AppartmentCategory")] 
public class AppartmentCategoryController : ApiController { 
    //GET AppartmentCategory/043F61D1-7194-E611-A98B-9C5C8E0005FA 
    [HttpGet] 
    [Route("{uid:guid}")] 
    public IHttpActionResult Get(Guid uid){...} 

    //GET AppartmentCategory?propertyUid=2fdc968d-0192-e611-a98b-9c5c8e0005fa 
    [HttpGet] 
    [Route("")] 
    public IHttpActionResult GetList(Guid propertyUid){...} 
} 
+0

내 문제에 대한 설명과 해결에 큰 감사드립니다! – ashpakov

관련 문제