asp.net-web-api
Atributo de enrutamiento en WebAPI
Buscar..
Introducción
Como su nombre indica, esto utiliza atributos para enrutar. Esto le da al usuario más control sobre los URI en la WebAPI. Por ejemplo, puede describir las jerarquías del recurso. Sin embargo, el anterior 'Enrutamiento convencional' es totalmente compatible. Los usuarios pueden tener una mezcla de ambos también.
Sintaxis
- [RoutePrefix ("api / books")] - para la clase de controlador
- [Ruta ("getById")] - para acciones
- [Ruta ("~ / api / autores / {autorId: int} / libros")] - para anular prefijo de ruta
Parámetros
| Nombre del parámetro | Detalles |
|---|---|
| RoutePrefix | atribuir a la clase de controlador. todos los prefijos de URL comunes en las acciones son aplastados aquí. toma la cadena como entrada |
| Ruta | atribuir a las acciones del controlador. Cada acción tendrá una ruta asociada (no necesariamente). |
| Ruta ("~ / api /") | esto anula el prefijo de ruta |
Observaciones
Actualmente, las rutas de atributos no tienen Controller specific Message Handlers . Como no hay manera de especificar qué controlador ejecutar para qué ruta en el momento de la declaración. Esto es posible en Conventional Routing .
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 /product/1/customer 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. productId 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();
}
}
Atributo de prefijo de ruta
En los casos en que necesite una parte común de la ruta para todas las rutas dentro de un controlador, se RoutePrefix atributo RoutePrefix .
En el siguiente ejemplo, la parte del código de la API / los estudiantes es común, por lo que podemos definir RoutePrefix y evitar usarlo repetidamente.
[RoutePrefix("api/students")]
public class StudentController : ApiController
{
[Route("")]
public IEnumerable<Student> Get()
{
//action code goes here
}
[Route("{id:int}")]
public Student Get(int id)
{
//action code goes here
}
[Route("")]
public HttpResponseMessage Post(Student student)
{
//action code goes here
}
}