#c# #asp.net-mvc #api #swagger
#c# #asp.net-mvc #API #развязность
Вопрос:
В ASP.NET В проекте MVC у нас есть несколько методов конечных точек, где некоторые теги устанавливаются для всех методов, таких как ProducesResponseType((int)HttpStatusCode.OK)
тег.
Есть ли способ установить некоторый ответ для всех методов в классе?
Как вы можете видеть, четыре строки кода используются только для кодов состояния
/// <summary> A summary describing the endpoint</summary>
[HttpPost("RenameSomething/", Name = "Rename[controller]")]
[Produces("application/json")]
[ProducesResponseType((int)HttpStatusCode.OK),
ProducesResponseType((int)HttpStatusCode.NotFound),
ProducesResponseType((int)HttpStatusCode.BadRequest),
ProducesResponseType((int)HttpStatusCode.InternalServerError)]
public ActionResult RenameSomething()
Ответ №1:
Вы можете применить такой ProducesResponseType
атрибут к своему классу контроллера, поскольку этот атрибут может быть применен как к методу, так и к классу, как указано в its AttributeUsage
.
[System.AttributeUsage(
System.AttributeTargets.Class |
System.AttributeTargets.Method,
AllowMultiple=true, Inherited=true
)]
public class ProducesResponseTypeAttribute : Attribute
[ProducesResponseType((int)HttpStatusCode.OK),
ProducesResponseType((int)HttpStatusCode.NotFound),
ProducesResponseType((int)HttpStatusCode.BadRequest),
ProducesResponseType((int)HttpStatusCode.InternalServerError)
]
public class MyController : Controller
{
}
Чтобы сделать это еще дальше, вы можете использовать подход, основанный на соглашениях, но это выглядит как нечто большее, чем вы просите.
Комментарии:
1. Спасибо, это здорово, я уже внедряю. Можно ли с уверенностью предположить, что тег метода
[ProducesResponseType(typeof(IEnumerable<SomethingDto>), (int)HttpStatusCode.OK)
переопределит тег класса[ProducesResponseType((int)HttpStatusCode.OK)]
?2. @jonadv Насколько я знаю / помню, атрибуты на уровне класса суммируются с атрибутами на уровне метода.