Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La documentation d’API commune peut être extraite et appliquée à plusieurs actions, contrôleurs ou tous les contrôleurs d’un assembly. Les conventions d’API web sont un substitut à la décoration d’actions individuelles avec [ProducesResponseType].
Une convention vous permet de :
- Définissez les types de retour et les codes d’état les plus courants retournés à partir d’un type d’action spécifique.
- Identifiez les actions qui s’écartent de la norme définie.
Les conventions par défaut sont disponibles à partir de Microsoft.AspNetCore.Mvc.DefaultApiConventions. Les conventions sont illustrées avec l’ajout ValuesController.cs à un modèle de projet d’API :
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
namespace WebApp1.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
[HttpGet("{id}")]
public ActionResult<string> Get(int id)
{
return "value";
}
// POST api/values
[HttpPost]
public void Post([FromBody] string value)
{
}
// PUT api/values/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
}
// DELETE api/values/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
}
Actions qui suivent les modèles du ValuesController.cs travail avec les conventions par défaut. Si les conventions par défaut ne répondent pas à vos besoins, consultez Créer des conventions d’API web.
Au moment de l’exécution, Microsoft.AspNetCore.Mvc.ApiExplorer comprend les conventions.
ApiExplorer est l’abstraction de MVC pour communiquer avec les générateurs de documents OpenAPI (également appelés Swagger). Les attributs de la convention appliquée sont associés à une action et sont inclus dans la documentation OpenAPI de l’action.
Les analyseurs d’API comprennent également les conventions. Si votre action n’est pas conventionnelle (par exemple, elle retourne un code d’état qui n’est pas documenté par la convention appliquée), un avertissement vous encourage à documenter le code d’état.
Affichez ou téléchargez l’exemple de code (procédure de téléchargement)
Appliquer des conventions d’API web
Les conventions ne composent pas ; chaque action peut être associée à exactement une convention. Les conventions plus spécifiques sont prioritaires sur les conventions moins spécifiques. La sélection n’est pas déterministe quand deux ou plusieurs conventions de la même priorité s’appliquent à une action. Les options suivantes permettent d’appliquer une convention à une action, du plus spécifique au moins spécifique :
Microsoft.AspNetCore.Mvc.ApiConventionMethodAttribute— S’applique à des actions individuelles et spécifie le type de convention et la méthode de convention qui s’applique.Dans l’exemple suivant, la méthode de convention par défaut du
Microsoft.AspNetCore.Mvc.DefaultApiConventions.Puttype de convention est appliquée à l’actionUpdate:// PUT api/contactsconvention/{guid} [HttpPut("{id}")] [ApiConventionMethod(typeof(DefaultApiConventions), nameof(DefaultApiConventions.Put))] public IActionResult Update(string id, Contact contact) { var contactToUpdate = _contacts.Get(id); if (contactToUpdate == null) { return NotFound(); } _contacts.Update(contact); return NoContent(); }La
Microsoft.AspNetCore.Mvc.DefaultApiConventions.Putméthode de convention applique les attributs suivants à l’action :[ProducesDefaultResponseType] [ProducesResponseType(StatusCodes.Status204NoContent)] [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status400BadRequest)]Pour plus d’informations sur
[ProducesDefaultResponseType], consultez Réponse par défaut.Microsoft.AspNetCore.Mvc.ApiConventionTypeAttributeappliqué à un contrôleur : applique le type de convention spécifié à toutes les actions sur le contrôleur. Une méthode de convention est marquée avec des indicateurs qui déterminent les actions auxquelles la méthode de convention s’applique. Pour plus d’informations sur les indicateurs, consultez Créer des conventions d’API web.Dans l’exemple suivant, l’ensemble de conventions par défaut est appliqué à toutes les actions dans ContactsConventionController :
[ApiController] [ApiConventionType(typeof(DefaultApiConventions))] [Route("api/[controller]")] public class ContactsConventionController : ControllerBase {Microsoft.AspNetCore.Mvc.ApiConventionTypeAttributeappliqué à un assembly : applique le type de convention spécifié à tous les contrôleurs de l’assembly actuel. À titre de recommandation, appliquez des attributs au niveau de l’assembly dans leStartup.csfichier.Dans l’exemple suivant, l’ensemble de conventions par défaut est appliqué à tous les contrôleurs de l’assembly :
[assembly: ApiConventionType(typeof(DefaultApiConventions))] namespace ApiConventions { public class Startup {
Créer des conventions d’API web
Si les conventions d’API par défaut ne répondent pas à vos besoins, créez vos propres conventions. Une convention est la suivante :
- Type statique avec des méthodes.
- Capable de définir les types de réponse et les exigences de nommage sur les actions.
Types de réponse
Ces méthodes sont annotées avec [ProducesResponseType] ou [ProducesDefaultResponseType] attributs. Par exemple:
public static class MyAppConventions
{
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public static void Find(int id)
{
}
}
Si des attributs de métadonnées plus spécifiques sont absents, l’application de cette convention à un assembly applique ce qui suit :
- La méthode de convention s’applique à toute action nommée
Find. - Un paramètre nommé
idest présent sur l’actionFind.
Exigences en matière de nommage
Les [ApiConventionNameMatch] attributs et [ApiConventionTypeMatch] les attributs peuvent être appliqués à la méthode de convention qui détermine les actions auxquelles elles s’appliquent. Par exemple:
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ApiConventionNameMatch(ApiConventionNameMatchBehavior.Prefix)]
public static void Find(
[ApiConventionNameMatch(ApiConventionNameMatchBehavior.Suffix)]
int id)
{ }
Dans l’exemple précédent :
- L’option
Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Prefixappliquée à la méthode indique que la convention correspond à toute action précédée de « Find ». Exemples d’actions correspondantes : ,FindFindPetetFindById. - L’application
Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Suffixau paramètre indique que la convention correspond aux méthodes avec exactement un paramètre se terminant par l’identificateur de suffixe. Les exemples incluent des paramètres tels queidoupetId.ApiConventionTypeMatchpeut être appliqué de la même façon aux types pour limiter le type de paramètre. Unparams[]argument indique les paramètres restants qui n’ont pas besoin d’être explicitement mis en correspondance.