2014-02-20 4 views
0

WEB API를 사용하여 웹 서비스를 만들었습니다.ASP .NET 웹 API에서의 라우팅

나는 위치 (

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

그리고 내 솔루션은 두 개의 컨트롤러 (ProductControllerDetailController) 그래서 나는 GetDetails 방법을 참조하는 WS를 호출 할 때

포함이 라우팅 구성을 사용하고 있습니다 inside DetailController) 다음과 같은 URL을 사용해야합니다 :

http://localhost/api/Details/GetDetails/?id=4 

동일한 요청에 대해이 URL을 사용할 수있는 방법이 있습니까? 대신 :

http://localhost/api/Product/GetDetails/?id=4 

DetailController에서 GetDetails 메서드를 사용 하시겠습니까?

답변

4

실제로 URL이 있어야한다 :

http://localhost/api/Details/4 
http://localhost/api/Products/4 

및 컨트롤러 :

public class DetailsController: ApiController 
{ 
    public HttpResponseMessage Get(int id) 
    { 
     ... 
    } 
} 

과 :

public class ProductsController: ApiController 
{ 
    public HttpResponseMessage Get(int id) 
    { 
     ... 
    } 
} 

이제이 편안하고의를.

+0

url 자체 대신 쿼리 매개 변수를 사용하여 (즉, http : // localhost/api/Details/4') 추론을 설명 할 수 있습니까? 그것은 "RESTful"하지 않습니다. –

+0

당신 말이 맞아요. 이 경우에는'/ {id} '를 갖는 것이 더 낫습니다. 그러나 이것은 쿼리 문자열 매개 변수가 RESTful이 아님을 의미하지는 않습니다. 일반적으로 선택적 매개 변수가있을 때이를 쿼리 문자열 매개 변수로 전달합니다. 이것은 일반적으로 여러 매개 변수를 사용해야하는 GET 요청에서 의미가 있습니다. 그러나 나는 경로 부분에서 리소스를 식별하는 식별자를 전달하는 것이 더 낫다는 것에 동의합니다. –

+0

아니요, 쿼리 매개 변수의 사용 사례를 이해합니다. id (이 경우)는 리소스를 고유하게 표현하기위한 것일뿐입니다. –