Swashbuckle / Swagger + ASP.Net Core: «Не удалось загрузить определение API» - PullRequest
0 голосов
/ 07 мая 2018

Я разрабатываю приложение ASP.NET Core 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 ведет себя так?

Можно ли использовать какую-либо конфигурацию?

Ответы [ 10 ]

0 голосов
/ 13 августа 2019

Просто вы можете заглянуть в журнал в окне Вывод . Фактическая ошибка может быть замечена там в моем случае, я пропустил добавление http-действия поверх моих методов

enter image description here

0 голосов
/ 31 января 2019

Другая возможная проблема заключается в том, что конечная точка должна быть завершена от корня домена.

У меня было:

app.UseSwaggerUI(c =>
{
     c.SwaggerEndpoint("/swagger/v1/swagger.json", "V1 Docs");
});

Я должен был использовать:

 app.UseSwaggerUI(c=>
{
     c.SwaggerEndpoint("/myApi/swagger/v1/swagger.json", "V1 Docs");

});
0 голосов
/ 12 июня 2019

Моей причиной ошибки было то же имя URL,

 [HttpGet("get/LeaveCommand/{id}")]

Я использую один и тот же URL, и чванство не может их получить

 [HttpGet("get/LeaveCommand/{id}")]
0 голосов
/ 16 ноября 2018

Я также получил эту ошибку, потому что я создал контроллер, который имеет [Route("api/[controller]")]. После установки ошибка исчезла.

0 голосов
/ 14 декабря 2018

В ASP.NET Core, если есть конечная точка контроллера, например:

[Route("images")]
[HttpGet("{id}")]

Это также может произойти с ошибкой извлечения. Решение состоит в том, чтобы иметь что-то вроде

[HttpGet("images/{id}")]

То же самое относится и к HttpPost.

0 голосов
/ 13 ноября 2018

Swagger также выдает то же исключение, если есть открытые методы, которые не являются действиями в контроллере. Исправление состоит в том, чтобы заставить их всех protected или private или, как уже упоминалось, добавить атрибут [ApiExplorerSettings(IgnoreApi = true)].

0 голосов
/ 05 ноября 2018

Я получаю TypeLoadException для класса, который я удаляю, и который не используется. В моем случае исправлением было удаление содержимого папки bin / obj / Debug. Чистое решение + восстановление решения не исправить для меня.

0 голосов
/ 26 июня 2018

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

0 голосов
/ 24 июня 2018

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

[ApiExplorerSettings(IgnoreApi = true)]

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

0 голосов
/ 09 мая 2018

Опция ResolveConflictingActions должна работать в этом случае ...

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

System.NotSupportedException: Ambiguous HTTP method for action

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

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

...