Services.AddSwaggerGen(), дающий ошибку

Все, что я пытаюсь сделать, это добавить swagger в основное приложение ASP.Net. Я смотрю учебное пособие, и все, что я вижу, это добавить services.AddSwaggerGen(); в области сервисов configure в файле Startup.cs. Как и любой обычный сервис, такой как MVC... Но я получаю сообщение об ошибке:

Нет аргументов, которые соответствуют требуемому формальному параметру 'setupAction'...

Я не вижу, чтобы кто-нибудь предоставлял какие-либо аргументы services.AddSwaggerGen(), так кто-нибудь знает, что мне здесь не хватает?

Я добавил зависимость SwashBuckler.AspNetCore, поэтому в приложении используется swagger. Просто не знаю, почему он краснеет и дает ошибку выше.

Ответ 1

Это происходит потому, что реализация AddSwaggerGen() расширения AddSwaggerGen() в ASP.NET Core требует предоставления аргумента Action<SwaggerGenOptions> который служит действием установки. Например:

services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });
});

Вы можете узнать больше о том, как настроить Swagger с приложением ASP.NET Core здесь.

ОБНОВЛЕНИЕ: В предыдущих версиях у них был метод расширения AddSwaggerGen() принимающий аргументов, но этот вызов сопровождался вызовом ConfigureSwaggerDocument(Action<SwaggerGenOptions> setupAction). Я предполагаю, что они только что избавились от ConfigureSwaggerDocument и добавили установочное действие в AddSwaggerGen(). При этом кажется, что ваш урок показывает, как установить устаревшую версию Swagger.

Ответ 2

У меня была проблема, что

IServiceCollection не содержит определения для AddSwaggerGen

Оказывается, что я установил пакет Nuget Swashbuckle.AspNetCore.Swagger вместо Swashbuckle.AspNetCore.

В .NET Core 3 есть некоторые проблемы, которые обсуждаются здесь. Решение состоит в том, чтобы добавить следующее в файл проекта, заменив предыдущую версию.

<PackageReference Include="Swashbuckle.AspNetCore" Version="5.0.0-rc2" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="5.0.0-rc2" />