두 개의 Get 메서드가있는 계정 컨트롤러가 있습니다. 하나는 모든 계정을 가져오고 입력을받지 않으며 다른 하나는 ID int를 사용하여 특정 계정을 반환합니다.Web API에서 속성을 사용하지 않고 두 개의 get 메소드를 사용하여 하나의 컨트롤러에 두 개의 개별 경로를 지정하려면 어떻게해야합니까?
프로젝트 제약 조건은 기본 경로에서 선택적 매개 변수로 id를 사용할 수 없으며 다른 경로를 통해 get-one-account 및 get-all-accounts에 액세스해야한다는 것입니다. 속성 라우팅을 사용하십시오. 그래서 우리의 경로 구성은 현재 다음과 같습니다 다음 AccountController에
config.Routes.MapHttpRoute("AccountWithId", "api/account/{id}", new { action = "Get", id = RouteParameter.Optional }
, new { httpMethod = new HttpMethodConstraint(HttpMethod.Get), id = @"\d+" });
config.Routes.MapHttpRoute("Default", "api/{controller}");
내 두 get 메소드는 다음과 같다 :
public IHttpActionResult Get()
{
IList<AccountDto> users = m_service.Get();
return Ok(users);
}
public IHttpActionResult Get(int accountId)
{
AccountDto user = m_service.Get(accountId);
return Ok(user);
}
을하지만 난 내 사용자 지정 경로를 통해 내 테스트에서 id 매개 변수로 가져 호출 할 때 및 디버그, 아래 여전히 ID 매개 변수를 사용하지 않는 Get 메서드를 때리고 모든 반환합니다.
var url = "http://test/api/account/" + accountId;
var response = await m_server.HttpClient.GetAsync(url);
왜 그런가?
** 선택 사항입니다 ** 계정 아이디, **는 가져 오기 (INT 계정 아이디) **이됩니다 오버로드로 숨겨져 ** Get() **. 따라서 ** accountId **를 선택적으로 만들 수는 없습니다. – Win
값이 선택적 일 때 항상 동일한 경로를 건다. becoz가 제공된다. 그렇지 않으면 선택 사항이 없으므로 경로가 항상 이전 일 것이고 과부하에 의해 감추어 질 것이다. – Tushar
@Win은 의미가 있지만, RouteParameter.Required 옵션을 사용하면 해당 매개 변수가 제거 된 것과 완전히 동일한 방식으로 실패합니다. 이 질문에 조언을 따르고 있었다 : http://stackoverflow.com/questions/9499794/single-controller-with-multiple-get-methods-in-asp-net-web-api – RSid