Swashbuckle / Swagger + ASP.Net Core: "не удалось загрузить определение API"

Я разрабатываю ASP.NET применение сердечника 2 и включенное Swagger. Все работало нормально, пока я не представил метод без явного определения действия HTTP:

public class ErrorController : Controller
{
    [Route("/error")]
    public IActionResult Index()
    {
        return StatusCode(500, new Error("Internal error."));
    }
}

когда я запустил приложение с помощью этого метода, появилось следующее сообщение:

не удалось загрузить определение API.

ошибки
Ошибка выборки Внутренняя ошибка сервера / swagger/v1 / swagger.в JSON

Как только я явно задать, например,[HttpGet] ошибка исчезает. Проблема в том, что мне нужен этот метод для запуска всех возможных операций HTTP. Конечно, я мог бы указать все операции явно, но у меня такое чувство, что Swagger должен быть в состоянии справиться с этим правильно.

почему Свэггер ведет себя так?

есть ли настройки я могу использовать?

3 ответов


параметр ResolveConflictingActions должен работать над этим делом...

вот фактическая ошибка:

System.NotSupportedException: Ambiguous HTTP method for action

это исходит от: https://github.com/domaindrivendev/Swashbuckle.AspNetCore/blob/master/src/Swashbuckle.AspNetCore.SwaggerGen/Generator/SwaggerGenerator.cs#L90

Я думаю, это ошибка, если вы действительно заинтересованы, вы должны сообщить об этом в проекте


Я не знаю, было ли это решено или нет, но один из способов, которым вы можете это сделать, - это украсить метод:

[ApiExplorerSettings(IgnoreApi = true)]

Это гарантирует, что рассматриваемый метод игнорируется Swagger.


Добавить Httpxxx([HttpGet], [HttpPost], ...) атрибут для каждого метода действия или [ApiExplorerSettings(IgnoreApi = true)]