Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Algemene API-documentatie kan worden geëxtraheerd en toegepast op meerdere acties, controllers of alle controllers binnen een assembly. Web-API-conventies zijn een vervanging voor het decoreren van afzonderlijke acties met [ProducesResponseType].
Met een conventie kunt u het volgende doen:
- Definieer de meest voorkomende retourtypen en statuscodes die worden geretourneerd door een specifiek type actie.
- Identificeer acties die afwijken van de gedefinieerde standaard.
Standaardconventies zijn beschikbaar via Microsoft.AspNetCore.Mvc.DefaultApiConventions. De conventies worden gedemonstreerd met ValuesController.cs toegevoegd aan een API-projectsjabloon:
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)
{
}
}
}
Acties die de patronen in ValuesController.cs volgen, werken met de standaardconventies. Als de standaardconventies niet aan uw behoeften voldoen, zie Conventies voor web-API's maken.
Tijdens de uitvoering begrijpt Microsoft.AspNetCore.Mvc.ApiExplorer conventies.
ApiExploreris de abstractie van MVC om te communiceren met OpenAPI-documentgeneratoren (ook wel Swagger genoemd). Kenmerken van de toegepaste conventie zijn gekoppeld aan een actie en worden opgenomen in de OpenAPI-documentatie van de actie.
API-analysen begrijpen ook conventies. Als uw actie onconventioneel is (bijvoorbeeld als er een statuscode wordt geretourneerd die niet wordt gedocumenteerd door de toegepaste conventie), wordt u aangemoedigd om de statuscode te documenteren.
Voorbeeldcode bekijken of downloaden (hoe download je)
Web-API-conventies toepassen
Conventies combineren niet; elke actie kan worden gekoppeld aan precies één conventie. Specifiekere conventies hebben voorrang op minder specifieke conventies. De selectie is niet-deterministisch wanneer twee of meer conventies van dezelfde prioriteit van toepassing zijn op een actie. Er zijn de volgende opties om een conventie toe te passen op een actie, van de meest specifieke naar de minst specifieke:
Microsoft.AspNetCore.Mvc.ApiConventionMethodAttribute— Is van toepassing op afzonderlijke acties en specificeert het conventietype en de conventiemethode die van toepassing is.In het volgende voorbeeld wordt de conventiemethode van het standaardconventietype
Microsoft.AspNetCore.Mvc.DefaultApiConventions.Puttoegepast op de actieUpdate:// 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(); }De
Microsoft.AspNetCore.Mvc.DefaultApiConventions.Putconventiemethode past de volgende kenmerken toe op de actie:[ProducesDefaultResponseType] [ProducesResponseType(StatusCodes.Status204NoContent)] [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status400BadRequest)]Microsoft.AspNetCore.Mvc.ApiConventionTypeAttributetoegepast op een controller : past het opgegeven conventietype toe op alle acties op de controller. Een conventiemethode wordt gemarkeerd met hints waarmee de acties worden bepaald waarop de conventiemethode van toepassing is. Zie Web-API-conventies maken voor meer informatie over hints.In het volgende voorbeeld wordt de standaardset conventies toegepast op alle acties in ContactsConventionController:
[ApiController] [ApiConventionType(typeof(DefaultApiConventions))] [Route("api/[controller]")] public class ContactsConventionController : ControllerBase {Microsoft.AspNetCore.Mvc.ApiConventionTypeAttributetoegepast op een assembly : past het opgegeven conventietype toe op alle controllers in de huidige assembly. Pas als aanbeveling kenmerken op assemblyniveau toe in hetStartup.csbestand.In het volgende voorbeeld wordt de standaardset conventies toegepast op alle controllers in de assembly:
[assembly: ApiConventionType(typeof(DefaultApiConventions))] namespace ApiConventions { public class Startup {
Web-API-conventies maken
Als de standaard-API-conventies niet aan uw behoeften voldoen, maakt u uw eigen conventies. Een conventie is:
- Een statisch type met methoden.
- Kan antwoordtypen en naamgevingsvereisten voor acties definiëren.
Antwoordtypen
Deze methoden worden geannoteerd met [ProducesResponseType] of [ProducesDefaultResponseType] kenmerken. Voorbeeld:
public static class MyAppConventions
{
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public static void Find(int id)
{
}
}
Als meer specifieke metagegevenskenmerken ontbreken, zorgt het toepassen van deze conventie op een assembly ervoor dat:
- De conventiemethode is van toepassing op een actie met de naam
Find. - Er is een parameter met de naam
idaanwezig in deFindactie.
Naamgevingsvereisten
De [ApiConventionNameMatch] kenmerken en [ApiConventionTypeMatch] kenmerken kunnen worden toegepast op de conventiemethode waarmee de acties worden bepaald waarop ze van toepassing zijn. Voorbeeld:
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ApiConventionNameMatch(ApiConventionNameMatchBehavior.Prefix)]
public static void Find(
[ApiConventionNameMatch(ApiConventionNameMatchBehavior.Suffix)]
int id)
{ }
In het voorgaande voorbeeld:
- De
Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Prefixoptie die op de methode wordt toegepast, geeft aan dat de conventie overeenkomt met een actie die is voorafgegaan door 'Zoeken'. Voorbeelden van overeenkomende acties zijnFind,FindPetenFindById. - De
Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Suffixtoegepaste parameter geeft aan dat de conventie overeenkomt met methoden met precies één parameter die eindigt op de achtervoegsel-id. Voorbeelden zijn parameters zoalsidofpetId.ApiConventionTypeMatchkan op dezelfde manier worden toegepast op typen om het parametertype te beperken. Eenparams[]argument geeft de resterende parameters aan die niet expliciet hoeven te worden vergeleken.