Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Allgemeine API-Dokumentation kann extrahiert und auf mehrere Aktionen, Controller oder alle Controller innerhalb einer Assembly angewendet werden. Web-API-Konventionen sind ein Ersatz für die Dekoration einzelner Aktionen mit [ProducesResponseType].
Eine Konvention ermöglicht Folgendes:
- Definieren Sie die gängigsten Rückgabetypen und Statuscodes, die von einem bestimmten Aktionstyp zurückgegeben werden.
- Identifizieren Sie Aktionen, die vom definierten Standard abweichen.
Standardkonventionen sind verfügbar von Microsoft.AspNetCore.Mvc.DefaultApiConventions. Die Konventionen werden veranschaulicht, indem ValuesController.cs zu einer API-Projektvorlage hinzugefügt wird.
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)
{
}
}
}
Aktionen, die den Mustern in ValuesController.cs folgen, arbeiten mit den Standardkonventionen. Wenn die Standardkonventionen Ihre Anforderungen nicht erfüllen, lesen Sie "Erstellen von Web-API-Konventionen".
Zur Laufzeit versteht Microsoft.AspNetCore.Mvc.ApiExplorer Konventionen.
ApiExplorer ist die MVC-Abstraktion für die Kommunikation mit OpenAPI (auch als Swagger bekannt) Dokumentengeneratoren. Attribute aus der angewendeten Konvention sind einer Aktion zugeordnet und in der OpenAPI-Dokumentation der Aktion enthalten.
API-Analysegeräte verstehen auch Konventionen . Wenn Ihre Aktion unkonventionell ist (z. B. gibt sie einen Statuscode zurück, der nicht von der angewendeten Konvention dokumentiert ist), empfiehlt eine Warnung, den Statuscode zu dokumentieren.
Anzeigen oder Herunterladen von Beispielcode (Anleitung zum Herunterladen)
Anwenden von Web-API-Konventionen
Konventionen bringen keine Komposition hervor; jede Aktion kann genau einer Konvention zugeordnet sein. Spezifischere Konventionen haben Vorrang vor weniger spezifischen Konventionen. Die Auswahl ist nicht deterministisch, wenn zwei oder mehr Konventionen derselben Priorität auf eine Aktion angewendet werden. Die folgenden Optionen sind vorhanden, um eine Konvention auf eine Aktion anzuwenden, von der spezifischsten auf die am wenigsten spezifische:
Microsoft.AspNetCore.Mvc.ApiConventionMethodAttribute— Gilt für einzelne Aktionen und gibt den Konventionstyp und die angewendete Konventionsmethode an.Im folgenden Beispiel wird die Konventionsmethode des Standardkonventionstyps
Microsoft.AspNetCore.Mvc.DefaultApiConventions.Putauf dieUpdateAktion angewendet:// 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(); }Die
Microsoft.AspNetCore.Mvc.DefaultApiConventions.PutKonventionsmethode wendet die folgenden Attribute auf die Aktion an:[ProducesDefaultResponseType] [ProducesResponseType(StatusCodes.Status204NoContent)] [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status400BadRequest)]Weitere Informationen
[ProducesDefaultResponseType]finden Sie unter "Standardantwort".Microsoft.AspNetCore.Mvc.ApiConventionTypeAttributeauf einen Controller angewendet – Wendet den angegebenen Konventionstyp auf alle Aktionen auf dem Controller an. Eine Konventionsmethode ist mit Hinweisen gekennzeichnet, die die Aktionen bestimmen, auf die die Konventionsmethode angewendet wird. Weitere Informationen zu Hinweisen finden Sie unter Erstellen von Web-API-Konventionen).Im folgenden Beispiel wird der Standardsatz von Konventionen auf alle Aktionen in ContactsConventionController angewendet:
[ApiController] [ApiConventionType(typeof(DefaultApiConventions))] [Route("api/[controller]")] public class ContactsConventionController : ControllerBase {Microsoft.AspNetCore.Mvc.ApiConventionTypeAttributeauf eine Assembly angewendet – Wendet den angegebenen Konventionstyp auf alle Controller in der aktuellen Assembly an. Wenden Sie als Empfehlung Attribute auf Assemblyebene in derStartup.csDatei an.Im folgenden Beispiel wird der Standardsatz von Konventionen auf alle Controller in der Assembly angewendet:
[assembly: ApiConventionType(typeof(DefaultApiConventions))] namespace ApiConventions { public class Startup {
Erstellen von Web-API-Konventionen
Wenn die Standard-API-Konventionen Ihre Anforderungen nicht erfüllen, erstellen Sie eigene Konventionen. Eine Konvention ist:
- Ein statischer Typ mit Methoden.
- In der Lage, Antworttypen und Benennungsanforderungen für Aktionen zu definieren.
Antworttypen
Diese Methoden werden mit [ProducesResponseType] Anmerkungen oder [ProducesDefaultResponseType] Attributen versehen. Beispiel:
public static class MyAppConventions
{
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public static void Find(int id)
{
}
}
Wenn spezifischere Metadatenattribute nicht vorhanden sind, erzwingt das Anwenden dieser Konvention auf eine Assembly folgendes:
- Die Konventionsmethode gilt für jede Aktion mit dem Namen
Find. - Ein benannter
idParameter ist für dieFindAktion vorhanden.
Benennungsanforderungen
Die [ApiConventionNameMatch] Und [ApiConventionTypeMatch] Attribute können auf die Konventionsmethode angewendet werden, die die Aktionen bestimmt, auf die sie angewendet werden. Beispiel:
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ApiConventionNameMatch(ApiConventionNameMatchBehavior.Prefix)]
public static void Find(
[ApiConventionNameMatch(ApiConventionNameMatchBehavior.Suffix)]
int id)
{ }
Im vorherigen Beispiel:
- Die
Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Prefixauf die Methode angewendete Option gibt an, dass die Konvention mit einer Aktion übereinstimmt, die mit dem Präfix "Suchen" versehen ist. Beispiele für übereinstimmende Aktionen sindFind,FindPetundFindById. - Die
Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Suffixanwendung auf den Parameter gibt an, dass die Konvention Methoden mit genau einem Parameter abgleicht, der auf dem Suffixbezeichner endet. Beispiele sind Parameter wieidz. B. oderpetId.ApiConventionTypeMatchkann ähnlich auf Datentypen verwendet werden, um den Parametertyp einzuschränken. Einparams[]Argument gibt verbleibende Parameter an, die nicht explizit übereinstimmen müssen.