Método de enlace de API web ASP.NET
-
27-10-2019 - |
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 ?
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).