Swagger не загружается - не удалось загрузить определение API: ошибка выборки не определена - PullRequest
0 голосов
/ 02 июля 2019

Попытка настроить swagger в сочетании с веб-приложением, размещенным на IIS Express. API построен с использованием ASP Net Core. Я следовал инструкциям, приведенным на соответствующей странице справки Microsoft в отношении Swashbuckle и ASP.NET Core.

Пока у меня есть загружаемая страница сваггера, и я вижу, что определенный мной SwaggerDoc загружается, однако никаких API нет. В настоящее время получаю следующую ошибку:

"Ошибка извлечения не определена ./swagger/v1/swagger.json"

public class Startup
{

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        // services.AddDbContext<TodoContext>(opt =>
        // opt.UseInMemoryDatabase("TodoList"));
        services.AddMvc()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

        // Register the Swagger generator, defining 1 or more Swagger documents
        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new Info { Title = "API WSVAP (WebSmartView)", Version = "v1" });
        });
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {

        // Enable middleware to serve generated Swagger as a JSON endpoint.
        app.UseSwagger();

        // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.),
        // specifying the Swagger JSON endpoint.
        app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("./swagger/v1/swagger.json", "My API V1");
            c.RoutePrefix = string.Empty;
        });

        app.UseMvc();
    }
}

1 Ответ

2 голосов
/ 09 июля 2019

Таким образом, после большого количества устранения неполадок, это сводилось в основном к двум вещам, но я чувствую, что в целом это может быть полезно для кого-то еще в будущем, поэтому я публикую ответ.

Сначала - еслиЕсли вы застряли с вышеупомянутой ошибкой, лучший способ увидеть, что происходит на самом деле, это добавить следующую строку в ваш метод Configure ()

app.UseDeveloperExceptionPage();

Теперь, если вы перейдете к «swagger / v1 / swagger».На странице json вы должны увидеть больше информации, которая укажет вам полезное направление.

Во-вторых, теперь для меня ошибка была чем-то вроде

'Несколько операций с путем' some_path 'и методом' GET ''

Однако эти API были расположены внутри библиотек зависимостей, поэтому я не смог применить решение в момент определения.В качестве обходного пути я обнаружил, что добавление следующей строки в ваш метод ConfigureServices () решило проблему

services.AddSwaggerGen(c =>
{
     c.SwaggerDoc("v1", new Info { Title = "API WSVAP (WebSmartView)", Version = "v1" });
     c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First()); //This line
});

Наконец, после всего этого я смог сгенерировать файл JSON, но все равно не смог вытащитьдо пользовательского интерфейса.Чтобы это работало, мне пришлось изменить конечную точку в Configure ()

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

Я не уверен, почему это было необходимо, хотя, возможно, стоит отметить, что виртуальный каталог веб-приложения размещен наIIS, который может оказать влияние.

Надеюсь, это поможет кому-то в будущем.

...