2014-02-20 15 views
0

Я создал веб-сервис с использованием WEB API.Маршрутизация в ASP.NET Web API

Я использую эту конфигурацию маршрутизации

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

И мое решение включает два контроллера (ProductController и DetailController)

Поэтому, когда я хочу, чтобы вызвать WS, который относится к методу GetDetails (расположен внутри DetailController) Я должен использовать URL, как это:

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

есть ли способ для использования, для того же запроса, этот URL Вместо этого:

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

Дает метод GetDetails внутри DetailController?

ответ

4

На самом деле ваши URLs должны быть:

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) 
    { 
     ... 
    } 
} 

Теперь это RESTful.

+0

Можете ли вы объяснить причину использования параметра запроса вместо самого URL-адреса для представления ресурса (например, http: // localhost/api/Details/4'). Это не кажется «RESTful». –

+0

Вы правы. Лучше иметь '/ {id}' в этом случае. Но это вовсе не означает, что параметры строки запроса не являются RESTful. Обычно, когда у меня есть дополнительные параметры, я передаю их как параметры строки запроса. Обычно это имеет смысл в запросах GET, которые должны принимать несколько параметров. Но я согласен с вами в том, что идентификатор, который идентифицирует ресурс, лучше передавать в части пути. –

+0

Нет, я понимаю вариант использования для параметра запроса. Казалось, что id (в данном случае) должен был представлять ресурс однозначно. –