Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A közös API-dokumentáció több műveletre, vezérlőre vagy egy szerelvényen belüli összes vezérlőre is kinyerhető és alkalmazható. A webes API-konvenciók helyettesítik az egyes műveletek dekorálását.[ProducesResponseType]
A konvenciók lehetővé teszik, hogy:
- Adja meg az adott művelettípusból visszaadott leggyakoribb visszatérési típusokat és állapotkódokat.
- Azonosítsa a definiált szabványtól eltérő műveleteket.
Az alapértelmezett konvenciók a következőből Microsoft.AspNetCore.Mvc.DefaultApiConventionsérhetők el: . A konvenciókat az ValuesController.csAPI-projektsablonhoz hozzáadott konvenciók szemléltetik:
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)
{
}
}
}
Az alapértelmezett konvenciókkal együttműködő ValuesController.cs mintákat követő műveletek. Ha az alapértelmezett konvenciók nem felelnek meg az igényeinek, tekintse meg a webes API-konvenciók létrehozását.
Futásidőben Microsoft.AspNetCore.Mvc.ApiExplorer tisztában van a konvenciókkal.
ApiExplorer az MVC absztrakciója az OpenAPI (más néven Swagger) dokumentumgenerátorokkal való kommunikációhoz. Az alkalmazott konvenció attribútumai egy művelethez vannak társítva, és szerepelnek a művelet OpenAPI-dokumentációjában.
Az API-elemzők a konvenciókat is megértik. Ha a művelet nem hagyományos (például olyan állapotkódot ad vissza, amelyet az alkalmazott konvenció nem dokumentál), egy figyelmeztetés arra ösztönzi, hogy dokumentálja az állapotkódot.
Mintakód megtekintése vagy letöltése (hogyan töltsd le)
Webes API-konvenciók alkalmazása
A konvenciók nem komponálnak; minden művelet pontosan egy konvencióval társítható. A konkrétabb konvenciók elsőbbséget élveznek a kevésbé specifikus konvenciókéval szemben. A kijelölés nem determinisztikus, ha egy műveletre két vagy több azonos prioritású konvenció vonatkozik. A következő lehetőségek léteznek egy művelet konvenciójának alkalmazására, a legspecifikusabbtól a legkevésbé specifikusig:
Microsoft.AspNetCore.Mvc.ApiConventionMethodAttribute— Az egyes műveletekre vonatkozik, és meghatározza a konvenció típusát és az alkalmazandó konvenciós módszert.Az alábbi példában az alapértelmezett konvenciótípus konvenciómetódus-metódusa
Microsoft.AspNetCore.Mvc.DefaultApiConventions.Putlesz alkalmazva aUpdateműveletre:// 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(); }A
Microsoft.AspNetCore.Mvc.DefaultApiConventions.Putkonvenciómetódus a következő attribútumokat alkalmazza a műveletre:[ProducesDefaultResponseType] [ProducesResponseType(StatusCodes.Status204NoContent)] [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status400BadRequest)]További információ:
[ProducesDefaultResponseType]Alapértelmezett válasz.Microsoft.AspNetCore.Mvc.ApiConventionTypeAttributevezérlőre alkalmazva – A megadott konvenciótípust alkalmazza a vezérlőn található összes műveletre. A konvenciómetódusok olyan tippekkel vannak megjelölve, amelyek meghatározzák azokat a műveleteket, amelyekre a konvenciómetódus vonatkozik. További információ a tippekről: Webes API-konvenciók létrehozása).Az alábbi példában a rendszer az alapértelmezett konvenciók készletét alkalmazza a ContactsConventionController összes műveletére:
[ApiController] [ApiConventionType(typeof(DefaultApiConventions))] [Route("api/[controller]")] public class ContactsConventionController : ControllerBase {Microsoft.AspNetCore.Mvc.ApiConventionTypeAttributeszerelvényre alkalmazva – A megadott konvenciótípust alkalmazza az aktuális szerelvény összes vezérlőjének. Javaslatként alkalmazzon szerelvényszintű attribútumokat aStartup.csfájlban.Az alábbi példában a rendszer az alapértelmezett konvenciók készletét alkalmazza a szerelvény összes vezérlője esetében:
[assembly: ApiConventionType(typeof(DefaultApiConventions))] namespace ApiConventions { public class Startup {
Webes API-konvenciók létrehozása
Ha az alapértelmezett API-konvenciók nem felelnek meg az igényeinek, hozzon létre saját konvenciókat. A konvenciók a következőek:
- Statikus típus metódusokkal.
- Képes a műveletekre vonatkozó választípusok és elnevezési követelmények meghatározására.
Választípusok
Ezek a metódusok széljegyzetekkel vagy [ProducesResponseType] attribútumokkal vannak eljegyzve[ProducesDefaultResponseType]. Például:
public static class MyAppConventions
{
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public static void Find(int id)
{
}
}
Ha konkrétabb metaadat-attribútumok hiányoznak, a konvenció szerelvényre való alkalmazása a következőt kényszeríti ki:
- A konvenciómetódus a nevesített
Findműveletekre vonatkozik. - A
idműveleten van egyFindnevű paraméter.
Elnevezési követelmények
Az [ApiConventionNameMatch] és [ApiConventionTypeMatch] az attribútumok alkalmazhatók a konvenciós módszerre, amely meghatározza azokat a műveleteket, amelyekre vonatkoznak. Például:
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ApiConventionNameMatch(ApiConventionNameMatchBehavior.Prefix)]
public static void Find(
[ApiConventionNameMatch(ApiConventionNameMatchBehavior.Suffix)]
int id)
{ }
Az előző példában:
- A
Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Prefixmetódusra alkalmazott beállítás azt jelzi, hogy a konvenció megfelel a "Keresés" előtagú műveleteknek. Példák az egyező műveletekre:Find,FindPetésFindById. - A
Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Suffixparaméterre alkalmazott paraméter azt jelzi, hogy a konvenció pontosan egy, az utótagazonosítóval végződő paraméterrel egyezik meg a metódusokkal. Ilyenek például az olyan paraméterek, mint aidvagypetIda .ApiConventionTypeMatchhasonló módon alkalmazható a típusokra a paramétertípus korlátozásához. Azparams[]argumentumok olyan fennmaradó paramétereket jelölnek, amelyeket nem kell explicit módon egyeztetni.