Вопрос

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

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: Получите http: // localhost/api/product/1 Анкет Я хочу, чтобы первый метод был вызван, а не второй метод.
Как я могу это сделать ?

Это было полезно?

Решение

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

Я написал немного Введение в веб -API ASP.net который показывает некоторые различия в 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

Что я делаю, так это наличие продуктов Controller и ProductController. ProductsController отвечает за операции по коллекциям T (Get All), а ProductController отвечает за операции на T (например, получение конкретной).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top