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 de ValuesController.cs
toegevoegde 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 het ValuesController.cs
werk volgen met de standaardconventies. Als de standaardconventies niet aan uw behoeften voldoen, raadpleegt u Web-API-conventies maken.
Tijdens runtime Microsoft.AspNetCore.Mvc.ApiExplorer begrijpt u conventies.
ApiExplorer
is 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 bestaan 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
Microsoft.AspNetCore.Mvc.DefaultApiConventions.Put
het standaardconventietype toegepast op deUpdate
actie:// 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.Put
conventiemethode past de volgende kenmerken toe op de actie:[ProducesDefaultResponseType] [ProducesResponseType(StatusCodes.Status204NoContent)] [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status400BadRequest)]
Zie Standaardantwoord voor meer informatie
[ProducesDefaultResponseType]
.Microsoft.AspNetCore.Mvc.ApiConventionTypeAttribute
toegepast 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.ApiConventionTypeAttribute
toegepast op een assembly : past het opgegeven conventietype toe op alle controllers in de huidige assembly. Pas als aanbeveling kenmerken op assemblyniveau toe in hetStartup.cs
bestand.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.
Response types
Deze methoden worden geannoteerd met [ProducesResponseType]
of [ProducesDefaultResponseType]
kenmerken. For example:
public static class MyAppConventions
{
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public static void Find(int id)
{
}
}
Als er meer specifieke metagegevenskenmerken ontbreken, dwingt u deze conventie toe op een assembly om het volgende af te dwingen:
- De conventiemethode is van toepassing op een actie met de naam
Find
. - Er is een parameter met de naam
id
aanwezig in deFind
actie.
Naming requirements
De [ApiConventionNameMatch]
kenmerken en [ApiConventionTypeMatch]
kenmerken kunnen worden toegepast op de conventiemethode waarmee de acties worden bepaald waarop ze van toepassing zijn. For example:
[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.Prefix
optie 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
,FindPet
enFindById
. - De
Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Suffix
toegepaste parameter geeft aan dat de conventie overeenkomt met methoden met precies één parameter die eindigt op de achtervoegsel-id. Voorbeelden zijn parameters zoalsid
ofpetId
.ApiConventionTypeMatch
kan 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.