Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La documentazione dell'API comune può essere estratta e applicata a più azioni, controller o tutti i controller all'interno di un assembly. Le convenzioni dell'API Web sono un sostituto per la decorazione di singole azioni con [ProducesResponseType].
Una convenzione consente di:
- Definire i tipi restituiti e i codici di stato più comuni restituiti da un tipo specifico di azione.
- Identificare le azioni che si discostono dallo standard definito.
Le convenzioni predefinite sono disponibili da Microsoft.AspNetCore.Mvc.DefaultApiConventions. Le convenzioni vengono illustrate con l'aggiunta ValuesController.cs a un modello di progetto 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)
{
}
}
}
Azioni che seguono i modelli nel ValuesController.cs lavoro con le convenzioni predefinite. Se le convenzioni predefinite non soddisfano le proprie esigenze, vedere Creare convenzioni api Web.
In fase di esecuzione, Microsoft.AspNetCore.Mvc.ApiExplorer comprende le convenzioni.
ApiExplorer è l'astrazione di MVC per comunicare con i generatori di documenti OpenAPI (noti anche come Swagger). Gli attributi della convenzione applicata sono associati a un'azione e sono inclusi nella documentazione OpenAPI dell'azione.
Gli analizzatori API comprendono anche le convenzioni. Se l'azione non è convenzionale (ad esempio, restituisce un codice di stato non documentato dalla convenzione applicata), un avviso invita a documentare il codice di stato.
Visualizzare o scaricare il codice di esempio (come scaricare)
Applicare convenzioni api Web
Le convenzioni non compongono; ogni azione può essere associata esattamente a una convenzione. Le convenzioni più specifiche hanno la precedenza su convenzioni meno specifiche. La selezione non è deterministica quando due o più convenzioni della stessa priorità si applicano a un'azione. Esistono le opzioni seguenti per applicare una convenzione a un'azione, dal più specifico al meno specifico:
Microsoft.AspNetCore.Mvc.ApiConventionMethodAttribute— Si applica alle singole azioni e specifica il tipo di convenzione e il metodo di convenzione applicabile.Nell'esempio seguente il metodo convenzione del
Microsoft.AspNetCore.Mvc.DefaultApiConventions.Puttipo di convenzione predefinito viene applicato all'azioneUpdate:// 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(); }Il
Microsoft.AspNetCore.Mvc.DefaultApiConventions.Putmetodo convention applica gli attributi seguenti all'azione:[ProducesDefaultResponseType] [ProducesResponseType(StatusCodes.Status204NoContent)] [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status400BadRequest)]Per altre informazioni su
[ProducesDefaultResponseType], vedere Risposta predefinita.Microsoft.AspNetCore.Mvc.ApiConventionTypeAttributeapplicato a un controller : applica il tipo di convenzione specificato a tutte le azioni nel controller. Un metodo di convenzione è contrassegnato con hint che determinano le azioni a cui si applica il metodo della convenzione. Per altre informazioni sugli hint, vedere Creare convenzioni api Web.Nell'esempio seguente il set predefinito di convenzioni viene applicato a tutte le azioni in ContactsConventionController:
[ApiController] [ApiConventionType(typeof(DefaultApiConventions))] [Route("api/[controller]")] public class ContactsConventionController : ControllerBase {Microsoft.AspNetCore.Mvc.ApiConventionTypeAttributeapplicato a un assembly : applica il tipo di convenzione specificato a tutti i controller nell'assembly corrente. Come raccomandazione, applicare attributi a livello di assembly nelStartup.csfile.Nell'esempio seguente il set predefinito di convenzioni viene applicato a tutti i controller nell'assembly:
[assembly: ApiConventionType(typeof(DefaultApiConventions))] namespace ApiConventions { public class Startup {
Creare convenzioni api Web
Se le convenzioni API predefinite non soddisfano le proprie esigenze, creare convenzioni personalizzate. Una convenzione è:
- Tipo statico con metodi.
- In grado di definire i tipi di risposta e i requisiti di denominazione per le azioni.
Tipi di risposta
Questi metodi vengono annotati con [ProducesResponseType] attributi o [ProducesDefaultResponseType] . Per esempio:
public static class MyAppConventions
{
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public static void Find(int id)
{
}
}
Se gli attributi di metadati più specifici sono assenti, l'applicazione di questa convenzione a un assembly impone che:
- Il metodo della convenzione si applica a qualsiasi azione denominata
Find. - Un parametro denominato
idè presente nell'azioneFind.
Requisiti di denominazione
Gli attributi [ApiConventionNameMatch] e [ApiConventionTypeMatch] possono essere applicati al metodo di convenzione che determina le azioni a cui si applicano. Per esempio:
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ApiConventionNameMatch(ApiConventionNameMatchBehavior.Prefix)]
public static void Find(
[ApiConventionNameMatch(ApiConventionNameMatchBehavior.Suffix)]
int id)
{ }
Nell'esempio precedente:
- L'opzione
Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Prefixapplicata al metodo indica che la convenzione corrisponde a qualsiasi azione preceduta da "Trova". Esempi di azioni di corrispondenza includonoFind,FindPeteFindById. - L'oggetto
Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Suffixapplicato al parametro indica che la convenzione corrisponde ai metodi con esattamente un parametro che termina nell'identificatore del suffisso. Gli esempi includono parametri comeidopetId.ApiConventionTypeMatchpuò essere applicato in modo analogo ai tipi per vincolare il tipo di parametro. Unparams[]argomento indica gli altri parametri che non devono essere esplicitamente corrispondenti.