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 
}

}


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow