asp.net-web-api
Routage d'attribut dans WebAPI
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
}
}