2

안녕하세요, 저는 webapi 응용 프로그램을 개발 중이며 한 컨트롤러에 세 가지 방법이 있습니다. 두 가지 방법을 호출 할 수 있지만 세 번째 것은 호출 할 수 없습니다.하나의 컨트롤러에서 세 가지 get 메서드를 호출하는 방법은 무엇입니까?

다음은 내가 부를 수있는 방법입니다.

[HttpGet] 
[Route("me")] 
public HttpResponseMessage me() 
{ 
    return Request.CreateResponse(HttpStatusCode.OK, "Get me"); 
} 
URL:http://localhost:22045/api/user/me 

[HttpGet] 
public HttpResponseMessage getUser(int id) 
{ 
    return Request.CreateResponse(HttpStatusCode.OK, "Get user"); 
} 

URL: http://localhost:22045/api/user/1 

아래에서 전화 할 수 없습니다.

[Route("user/{role}")] 
public HttpResponseMessage Get(string role) 
{ 
    return Request.CreateResponse(HttpStatusCode.OK, "Get me on role"); 
} 

은 내가 여기에 몇 가지 도움을받을 수 있습니다
http://localhost:22045/api/user/OptionalRoleParameter 

과 같이 호출 할? 어떤 도움을 주시면 감사하겠습니다.

답변

2

경로 제약 조건이있는 특성 경로를 사용하면 충돌을 피하기 위해 경로를 충분히 구별하는 데 도움이됩니다.

먼저 속성 라우팅이 활성화되어 있는지 확인하십시오.

config.MapHttpAttributeRoutes(); 

그런 다음 컨트롤러가 필요한 속성이 있는지 확인

[RoutePrefix("api/user")] 
public class UsersController : ApiController { 

    //GET api/user/me 
    [HttpGet] 
    [Route("me")] 
    public HttpResponseMessage me() { 
     return Request.CreateResponse(HttpStatusCode.OK, "Get me"); 
    } 

    //GET api/user/1 
    [HttpGet] 
    [Route("{id:int")] // NOTE the parameter constraint 
    public HttpResponseMessage getUser(int id) { 
     return Request.CreateResponse(HttpStatusCode.OK, "Get user"); 
    } 

    //GET api/user 
    //GET api/user/OptionalRoleHere 
    [HttpGet] 
    [Route("{role?}")] //NOTE the question mark used to identify optional parameter 
    public HttpResponseMessage Get(string role = null) { 
     return Request.CreateResponse(HttpStatusCode.OK, "Get me on role"); 
    } 
} 

출처 :

+0

감사합니다. 그것은 효과가 있었다. –

3

더 많은 정보를 원하시면,이 볼이 웹 API에 널 (NULL) 제약 조건으로 지원되지 있기 때문에 당신은 선택적 매개 변수로 string을 가질 수 없습니다

[Route("user/{role?}")] 
public HttpResponseMessage Get(string role) 
{ 
    return Request.CreateResponse(HttpStatusCode.OK, "Get me on role"); 
} 

string로 선택적 경로 매개 변수, Route Constraints in Web API

+0

Attribute Routing in ASP.NET Web API 2 : Route Constraints 감사합니다. 이 문제를 해결하는 다른 방법이 있습니까? –

+0

당신은 커스텀 라우트 컨 스트레인 트를 쓸 수 있습니다. 예를 들어 대답에서 주어진 링크에서 이용하실 수 있습니다 –