Web Api 모범 사례를 사용하여 REST 서비스를 만들려고하고 있으며 처리 방법을 알 수없는 상황에 이르렀습니다.다른 동작을 동일한 서명이있는 웹 API 메서드에 매핑하는 방법
내가 그룹을 가지고 있고 각 그룹 안에 사용자가 있다고 상상해보십시오.
이 내 GroupController 같은 모습입니다 : 당신이 볼 수 있듯이 우리는 같은 클래스에서 동일한 서명을 가진 두 가지 방법이 없기 때문에, 내 두 번째 방법은 컴파일되지 않습니다
[RoutePrefix("api/v1/groups")]
public class GroupsController : ApiController
{
[HttpGet]
[Route("{id:int}")]
public IHttpActionResult Get(int id)
{
return Ok();
}
// I also want to add endpoint which fetches all the users inside of group and I'd like to do it like this:
[HttpGet]
[Route("{id:int}/users")]
public IHttpActionResult Get(int id)
{
return Ok();
}
}
.
내 경로 템플릿은 STANDART처럼 보이는 :
config.Routes.MapHttpRoute(
name: "DefaultRouting",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
나는 액션 메소드 이름을 매핑하지만 내 목표를 달성하기위한 더 나은 방법이 있는지 궁금 해서요 경로를 추가 할 수 있다는 것을 알고. RESTful 서비스 작성을위한 최상의 원칙을 고수하고 싶습니다. 아시다시피, 제안 사항 중 하나는 WCF 서비스에 더 일반적이므로 사용자 지정 액션 이름을 사용하지 않는 것입니다.
로 이동하여 "GetUsersForGroup (INT ID)를"그럼 내가 칠 수있을 것입니다 : 메소드 서명에 아무런 충돌이 없는지 확인하기 위해 다음과 같이
마지막으로, 나는 당신의 방법 이름을 바꿀 것 api/v1/groups/1/usersforgroup? – user2128702
아니요, 속성의 경로는'api/v1/groups/1/users'입니다. 이것은 라우트가 메소드 이름에 종속되지 않으므로 속성 라우팅을 선호하는 이유이기도합니다. – toadflakz
내가 "GetUsers (int id)"메서드를 눌렀을 것이고 실제로 그렇게 할 것입니다. 그래서 내가 당신의 대답을 대답으로 표시했습니다. – user2128702