Pregunta

Tengo dos métodos como este

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;
    }
}

Cuando llamo a URL: Obtén http: // localhost/api/producto/1 . Quiero que se invoque el primer método, no el segundo método.
Cómo puedo hacer eso ?

¿Fue útil?

Solución

Necesitas URI único. Puede modificar su ruta para obtener esto:

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

);

Ahora puede acceder a su API como esta:

http: // localhost/api/producto/getProductByid/1

http: // localhost/api/producto/getProduct/1

He escrito un poco Introducción a la API web ASP.NET que muestra algunas de las diferencias a la API web de WCF.

También puede agregar una acción predeterminada, por ejemplo, la que enumera todos los productos para que pueda hacer algo como esto:

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

y el otro se invoca de esta manera

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

Lo que hago es tener un controlador de productos y un ProductController. ProductSController es responsable de las operaciones de colecciones de T (Get All) y ProductController es responsable de las operaciones en T (como obtener una específica).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top