См. следующие соглашения веб-API и соответствующий контроллер.
Код: Выделить всё
public static class MyAppConventions
{
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound,
MediaTypeNames.Application.ProblemJson)]
[ApiConventionNameMatch(ApiConventionNameMatchBehavior.Prefix)]
public static void Get(){}
}
Код: Выделить всё
[ApiConventionType(typeof(MyAppConvention))]
[Route("test")]
public class TestController : ControllerBase
{
[HttpGet]
public IActionResult GetData()
{
if (condition)
return NotFound();
else
return Ok(new TestDto());
}
}
Если я добавлю дополнительный ProducesResponseType, чтобы отметить пользовательский код ответа, отсутствующий в соответствующем соглашении, он игнорирует атрибуты соглашения.
Код: Выделить всё
[ApiConventionType(typeof(MyAppConvention))]
[Route("test")]
public class TestController : ControllerBase
{
[ProducesResponseType(typeof(TestDto), StatusCodes.Status200Ok, MediaTypeNames.Application.Json)]
[HttpGet]
public IActionResult GetData()
{
if (condition)
return NotFound();
else
return Ok(new TestDto());
}
}
Ссылки
[*]https://learn.microsoft.com /en-us/aspnet/core/web-api/advanced/conventions?view=aspnetcore-8.0
[*]Пользовательские соглашения веб-API не работают с ODataController
Подробнее здесь: https://stackoverflow.com/questions/790 ... ibute-is-p