Enrutamiento de atributos en ASP.NET Web API 2
En esta página
Como sugiere el nombre, esto usa atributos para enrutar. Esto le da al usuario más control sobre los URI en WebAPI. Por ejemplo, puede describir jerarquías del recurso. Sin embargo, el ‘Enrutamiento convencional’ anterior es totalmente compatible. Los usuarios también pueden tener una mezcla de ambos.
Sintaxis
- [RoutePrefix(“api/books”)] - para la clase de controlador
- [Route(“getById”)] - para acciones
- [Route("~/api/authors/{authorId:int}/books")] - para anular el prefijo de ruta
Parámetros
Nombre del parámetro | Detalles |
---|---|
Prefijo de ruta | atributo a la clase de controlador. todos los prefijos de URL comunes en las acciones se incluyen aquí. toma cadena como entrada |
Ruta | atribuir a las acciones del controlador. cada acción tendrá asociada una ruta (no necesariamente) |
Ruta("~/api/") | esto anula el prefijo de ruta |
Actualmente, Attribute Routes no tiene controladores de mensajes específicos del controlador. Como no hay forma de especificar qué controlador ejecutar para qué ruta en el momento de la declaración. Esto es posible en el enrutamiento convencional.
Enrutamiento de atributos básicos
Simplemente agregue un atributo a la acción del controlador
[Route("product/{productId}/customer")]
public IQueryable<Product> GetProductsByCustomer(int productId)
{
//action code goes here
}
esto se consultará como /producto/1/cliente y productId=1 se enviará a la acción del controlador.
Asegúrese de que el que está dentro de ‘{ }’ y el parámetro de acción sean los mismos. ID de producto en este caso.
antes de usar esto, debe especificar que está utilizando el enrutamiento de atributos por:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
}
}
Prefijos de ruta
Por lo general, las rutas en un controlador tienen el mismo prefijo conectado de alguna manera con la funcionalidad de este controlador. Por ejemplo:
public class ProductsController : ApiController
{
[Route("api/products")]
public IEnumerable<Product> GetProducts() { ... }
[Route("api/products/{id:int}")]
public Product GetProduct(int id) { ... }
[Route("api/products")]
[HttpPost]
public HttpResponseMessage CreateProduct(Product product) { ... }
}
En tal escenario, podemos establecer un prefijo común para todo el controlador. Para hacerlo usamos el atributo [RoutePrefix]
:
[RoutePrefix("api/products")]
public class ProductsController : ApiController
{
// GET api/products
[Route("")]
public IEnumerable<Product> GetProducts() { ... }
// GET api/products/5
[Route("{id:int}")]
public Product GetProduct(int id) { ... }
//POST api/products
[Route("")]
[HttpPost]
public HttpResponseMessage CreateProduct(Product product) { ... }
}
Prefijo de ruta anulada
Si queremos anular el prefijo de la ruta, podemos usar una tilde (~) en el atributo de enrutamiento del método:
[RoutePrefix("api/products")]
public class ProductsController : ApiController
{
// GET api/owners/products
[Route("~/api/owners/products")]
public IEnumerable<Product> GetProducts() { ... }
//...
}