2012-02-17 5 views
3

связывания У меня есть два метода, как этотASP.NET Web API метод

public class ProductController : ApiController 
{ 
    public Product GetProductById(int id) 
    { 
     var product = ... //get product 
     return product; 
    } 

    public Product GetProduct(int id) 
    { 
     var product = ... //get product 
     return product; 
    } 
} 

Когда я называю URL: GET http://localhost/api/product/1. Я хочу, чтобы первый метод был вызван, а не второй метод.
Как я могу это сделать?

ответ

4

Вам нужны уникальные URI. Вы можете изменить свой маршрут, чтобы получить:

routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{action}/{id}", 
     defaults: new { id = RouteParameter.Optional } 

);

Теперь вы можете получить доступ к API, как это:

http://localhost/api/product/GetProductById/1

http://localhost/api/product/GetProduct/1

Я написал немного introduction to ASP.NET Web API, который показывает некоторые различия в WCF Web API.

Вы также можете добавить действие по умолчанию, например. С одной списков всех продуктов, так что вы можете сделать что-то вроде этого:

http://localhost/api/product/ // returns the list without specifying the method 

, а другая вызываются так

http://localhost/api/product/byid/1 // returns the list without specifying the method 

Что я оказываю ProductsController и ProductController. ProductsController отвечает за операции над коллекциями T (получить все), а ProductController отвечает за операции над T (как получение определенного).

+0

Таким образом, это не REST, это RPC. Я ищу атрибут, такой как [NeverBind] ... но они еще не существовали, мы можем использовать этот атрибут для обозначения метода, когда мы не хотим привязывать его к URI. – dohaivu

+0

Обновлен мой комментарий. –

+0

Когда я задаю этот вопрос, я задаюсь вопросом, есть ли у меня больше, чем метод, который префикс Get, как API-интерфейс ASP.NET связывает их, и я хочу, чтобы он был REST, а не RPC. Я google, но не отвечаю – dohaivu

Смежные вопросы