Метод связывания ASP.NET Web API - PullRequest
3 голосов
/ 17 февраля 2012

У меня есть два метода, подобных этому

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.Я хочу, чтобы был вызван первый метод, а не второй.Как я могу это сделать?

1 Ответ

4 голосов
/ 17 февраля 2012

Вам нужны уникальные 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

Я написал небольшое введение в 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 (например, получение определенной).

...