Это сообщение съедает настоящую ошибку. Проблема заключается либо в неправильной конфигурации API, например, CORS не позволяет возвращать файл json, либо в самой конфигурации Swagger.
Вот несколько вещей, которые стоит попробовать. При запущенном Swagger и сообщении в браузере
Перейдите непосредственно к самому URL-адресу JSON (например: http://myserver.domain:port/swagger/v1/swagger.json). Если вы получаете ошибку 404, значение SwaggerEndpoint неверно.
SwaggerEndpoint("incorrect/v1/swagger.json", "My incorrect Application Version 1");
SwaggerEndpoint("v1/swagger.json", "My correct Application Version 1");
Как только вы попытаетесь получить файл swagger.json по правильному пути, вы увидите либо JSON в своем браузере, либо исключение из вызова метода Swagger. Вы можете увидеть трассировку стека от Swagger, чтобы определить причину.
Одна из причин, по которой это происходит, заключается в том, что у вас есть общедоступный метод в контроллере, который не является конечной точкой API, но Swagger думает, что это так, пока он не сможет прочитать HTTPAttribute, чтобы определить, какой глагол использует конечная точка (т.е. GET, POST ...) или маршрут (/ controller / action / {parameter: dataType} / somethingElse)
// This should be private, not public!
public ReturnType MyHelperMethod(object parameter){
//Do something to parameter
return InstanceOfReturnType;
}
Другая причина заключается в том, что разные используемые модели данных не являются уникальными схемами и вы не настроили swagger для полной квалификации моделей схем, чтобы гарантировать уникальность.
Пример: -
[HttpGet, Route("something", Name = "Do Something")]
public IActionResult DoSomething([FromBody] Datamodel.Something something)
{
var returnValue = Service.DoSomething(something);
return returnValue;
}
[HttpGet, Route("somethingElse", Name = "Do Something Else")]
public IActionResult DoSomethingElse([FromBody] IdenticalDatamodel.Something somethingElse)
{
var returnValue = Service.DoSomethingElse(somethingElse);
return returnValue;
}
namespace IdenticalDatamodel {
public class Something {
public string SomeProperty{ get; set;}
}
}
namespace Datamodel {
public class Something {
public string SomeProperty{ get; set;}
}
}
В этом случае класс Something из двух разных пространств имен имеет одинаковую схему, поэтому Swagger задыхается, поскольку они идентичны. Одно из исправлений - настроить Swagger на полную квалификацию идентификаторов схемы, поэтому Something в методе DoSomething () и Something в методе DoSomethingElse () вместо этого будут идентифицироваться как < strong> Datamodel.Something и IdenticalDatamodel.Something от Swagger при создании файла .json.
Для этого вы можете использовать следующий код в Startup.cs
public void ConfigureServices(IServiceCollection services)
{
//Add a bunch of service configurations here
// ...
// It's probably better to externalize the Swagger config to it's own private helper method
services.AddSwaggerGen(swagger =>
{
// Setup your Swagger doc, security etc here
});
// Customize the Swagger generator here
services.ConfigureSwaggerGen(options =>
{
// Use fully qualified schema object names to ensure uniqueness
options.CustomSchemaIds(configuration => configuration.FullName);
});
}
person
Antony Booth
schedule
20.03.2019
app.Run(context => { context.Response.Redirect("swagger"); return Task.CompletedTask; });
из метода Startup Configure. - person Junior Mayhé   schedule 13.07.2019