Recherche…


Introduction

Comme son nom l'indique, cela utilise des attributs pour router. Cela donne à l'utilisateur plus de contrôle sur les URI dans WebAPI. Par exemple, vous pouvez décrire des hiérarchies de la ressource. Toutefois, le «routage conventionnel» antérieur est entièrement pris en charge. Les utilisateurs peuvent aussi avoir un mélange des deux.

Syntaxe

  • [RoutePrefix ("api / books")] - pour la classe du contrôleur
  • [Route ("getById")]] - pour les actions
  • [Route ("~ / api / authors / {authorId: int} / books")] - pour remplacer le préfixe de route

Paramètres

Le nom du paramètre Détails
RoutePrefix attribuer à la classe de contrôleur. tous les préfixes d'url courants dans les actions sont mis en boîte ici. prend la chaîne en entrée
Route attribuer aux actions du contrôleur. chaque action aura son itinéraire associé (pas nécessairement)
Route ("~ / api /") cela remplace le préfixe de route

Remarques

Actuellement, les chemins d'attributs ne disposent pas de Controller specific Message Handlers . Comme il n'y a aucun moyen de spécifier quel gestionnaire exécuter pour quelle route au moment de la déclaration. Ceci est possible dans le Conventional Routing .

Routage d'attribut de base

Ajoutez simplement un attribut à l'action du contrôleur

[Route("product/{productId}/customer")]
public IQueryable<Product> GetProductsByCustomer(int productId) 
{ 
    //action code goes here 
}

Cette productId=1 sera interrogée sous la forme /product/1/customer et productId=1 sera envoyé à l’action du contrôleur.

Assurez-vous que celui dans '{}' et le paramètre d'action sont identiques. productId dans ce cas.

Avant d'utiliser ceci, vous devez spécifier que vous utilisez le routage d'attribut par:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();
    }
}

Attribut de préfixe de route

Dans les cas où vous avez besoin d'une partie commune de l'itinéraire pour toutes les routes dans un contrôleur, l'attribut RoutePrefix est utilisé.

Dans l'exemple ci-dessous, une partie api / students du code est commune et nous pouvons donc définir RoutePrefix et éviter de l'utiliser à plusieurs reprises.

[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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow