Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Общую документацию по API можно извлечь и применить к нескольким действиям, контроллерам или всем контроллерам в сборке. Соглашения веб-API являются заменой для декорирования отдельных действий.[ProducesResponseType]
Соглашение позволяет:
- Определите наиболее распространенные типы возвращаемых и коды состояния, возвращаемые из определенного типа действия.
- Определите действия, которые отклоняются от определенного стандарта.
Соглашения по умолчанию доступны из Microsoft.AspNetCore.Mvc.DefaultApiConventions. Соглашения демонстрируются с ValuesController.cs
добавлением в шаблон проекта 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)
{
}
}
}
Действия, которые следуют шаблонам в ValuesController.cs
работе с соглашениями по умолчанию. Если соглашения по умолчанию не соответствуют вашим потребностям, см. статью "Создание соглашений веб-API".
Во время выполнения Microsoft.AspNetCore.Mvc.ApiExplorer понимает соглашения.
ApiExplorer
— это абстракция MVC для взаимодействия с генераторами документов OpenAPI (также известной как Swagger). Атрибуты из примененного соглашения связаны с действием и включены в документацию openAPI действия.
Анализаторы API также понимают соглашения. Если ваше действие является неконвенционным (например, возвращает код состояния, который не документирован в примененном соглашении), предупреждение рекомендует документировать код состояния.
Просмотр или скачивание примера кода (как скачать)
Применение соглашений веб-API
Соглашения не составляют; каждое действие может быть связано с одним соглашением. Более конкретные соглашения имеют приоритет над менее конкретными соглашениями. Выбор не детерминирован, если два или более соглашений одного приоритета применяются к действию. Следующие параметры существуют для применения соглашения к действию, от наиболее конкретного к наименее конкретному:
Microsoft.AspNetCore.Mvc.ApiConventionMethodAttribute
— применяется к отдельным действиям и указывает тип соглашения и метод соглашения, который применяется.В следующем примере к действию применяется
Update
метод соглашения типаMicrosoft.AspNetCore.Mvc.DefaultApiConventions.Put
соглашения по умолчанию:// 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(); }
Метод
Microsoft.AspNetCore.Mvc.DefaultApiConventions.Put
соглашения применяет следующие атрибуты к действию:[ProducesDefaultResponseType] [ProducesResponseType(StatusCodes.Status204NoContent)] [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status400BadRequest)]
Дополнительные сведения см. в
[ProducesDefaultResponseType]
разделе "Ответ по умолчанию".Microsoft.AspNetCore.Mvc.ApiConventionTypeAttribute
применяется к контроллеру — применяет указанный тип соглашения ко всем действиям на контроллере. Метод соглашения помечается подсказками, определяющими действия, к которым применяется метод соглашения. Дополнительные сведения о подсказках см. в разделе "Создание соглашений о веб-API").В следующем примере набор соглашений по умолчанию применяется ко всем действиям в ContactsConventionController:
[ApiController] [ApiConventionType(typeof(DefaultApiConventions))] [Route("api/[controller]")] public class ContactsConventionController : ControllerBase {
Microsoft.AspNetCore.Mvc.ApiConventionTypeAttribute
применяется к сборке— применяет указанный тип соглашения ко всем контроллерам в текущей сборке. В качестве рекомендации примените атрибуты уровня сборкиStartup.cs
в файле.В следующем примере набор соглашений по умолчанию применяется ко всем контроллерам в сборке:
[assembly: ApiConventionType(typeof(DefaultApiConventions))] namespace ApiConventions { public class Startup {
Создание соглашений веб-API
Если соглашения API по умолчанию не соответствуют вашим потребностям, создайте собственные соглашения. Соглашение:
- Статический тип с методами.
- Способен определять типы ответов и требования именования для действий.
Response types
Эти методы аннотированы или [ProducesResponseType]
[ProducesDefaultResponseType]
атрибуты. For example:
public static class MyAppConventions
{
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public static void Find(int id)
{
}
}
Если отсутствуют более конкретные атрибуты метаданных, применение этого соглашения к сборке применяет следующее:
- Метод соглашения применяется к любому действию с именем
Find
. - В действии
Find
присутствует параметр с именемid
.
Naming requirements
[ApiConventionTypeMatch]
Атрибуты [ApiConventionNameMatch]
можно применить к методу соглашения, который определяет действия, к которым они применяются. For example:
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ApiConventionNameMatch(ApiConventionNameMatchBehavior.Prefix)]
public static void Find(
[ApiConventionNameMatch(ApiConventionNameMatchBehavior.Suffix)]
int id)
{ }
В предыдущем примере:
- Параметр,
Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Prefix
примененный к методу, указывает, что соглашение соответствует любому действию, префиксу "Find". Примеры действий сопоставления:Find
,FindPet
иFindById
. - Примененный
Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Suffix
к параметру параметр указывает, что соглашение соответствует методам ровно с одним параметром, заканчивающимся идентификатором суффикса. Примеры включают такие параметры, какid
илиpetId
.ApiConventionTypeMatch
можно аналогично применять к типам, чтобы ограничить тип параметра. Аргументparams[]
указывает на оставшиеся параметры, которые не должны быть явно сопоставлены.
Additional resources
ASP.NET Core