РЕДАКТИРОВАТЬ Этот ответ относится к Asp.Net-Core
, но может быть полезным и для этого вопроса.
Если вы используете Swashbuckle
, вы можете использовать IOperationFilter
и Reflection toцелевые конкретные конечные точки и программно применять ответы.
Можно использовать IOperationFilter
, чтобы применить InternalServerError ко всем конечным точкам в вашем сервисе.Ниже приведен пример:
public class ServerErrorResponseOperationFilter : IOperationFilter
{
// Applies the specified operation. Adds 500 ServerError to Swagger documentation for all endpoints
public void Apply(Operation operation, OperationFilterContext context)
{
// ensure we are filtering on controllers
if (context.MethodInfo.DeclaringType.BaseType.BaseType == typeof(ControllerBase)
|| context.MethodInfo.ReflectedType.BaseType == typeof(Controller))
{
operation.Responses.Add("500", new Response { Description = "Server Error" });
}
}
}
Вам необходимо настроить Swagger для использования этих фильтров.Вы можете сделать это, добавив в настройку:
services.AddSwaggerGen(swag =>
{
swag.SwaggerDoc("v1", new Info { Title = "Docs", Version = "v1" });
// add swagger filters to document default responses
swag.OperationFilter<ServerErrorResponseOperationFilter>();
});
Вы можете использовать другие фильтры для применения 401 Несанкционированный, 403 Запрещенный и т. Д. Вы можете даже использовать Отражение, чтобы добавить 201 Создан для действий, отмеченных [HttpPost]
и вы могли бы сделать нечто подобное для других атрибутов Http.
Если у вас есть фильтры для 401, 403 и 500, которые немного приведут в порядок ваш контроллер.Вам все равно нужно будет добавить атрибуты для определенных методов, которые не могут быть обработаны с помощью Reflection.С помощью этого метода, я считаю, мне нужно добавить только один или 2 атрибута, обычно [ProcudesResponseType((int)HttpStatusCode.BadRequest)]
и [ProcudesResponseType((int)HttpStatusCode.NotFound)]
.