Reputation: 9121
I have ASP.NET Core Web application where I am using swagger using the following:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddSwaggerGen(c =>
{
c.OperationFilter<ExamplesOperationFilter>();
c.OperationFilter<DescriptionOperationFilter>();
c.SwaggerDoc("v1", new Info
{
Version = "v1",
Title = "API",
Description = "",
});
// Set the comments path for the Swagger JSON and UI.
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
c.IncludeXmlComments(xmlPath);
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseSwagger();
app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "API"); });
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
}
When I navigate to url/swagger I am getting the following error:
fail: Microsoft.AspNetCore.Server.Kestrel[13] Connection id "0HLG1T7PRT05H", Request id: An unhandled exception was thrown by the application. System.TypeLoadException: Could not load type 'Swashbuckle.AspNetCore.SwaggerGen.SwaggerResponseAttribute' from assembly 'Swashbuckle.AspNetCore.SwaggerGen, Version=3.0.0.0, Culture=neutral'.at Swashbuckle.AspNetCore.Examples.DescriptionOperationFilter.SetResponseModelDescriptions(Operation operation, ISchemaRegistry schemaRegistry, ApiDescription apiDescription) at Swashbuckle.AspNetCore.Examples.DescriptionOperationFilter.Apply(Operation operation, OperationFilterContext context) at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.CreateOperation(ApiDescription apiDescription, ISchemaRegistry schemaRegistry) at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.CreatePathItem(IEnumerable
1 apiDescriptions, ISchemaRegistry schemaRegistry) at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable
1 source, Func2 keySelector, Func
2 elementSelector, IEqualityComparer1 comparer) at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.CreatePathItems(IEnumerable
1 apiDescriptions, ISchemaRegistry schemaRegistry) at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GetSwagger(String documentName, String host, String basePath, String[] schemes) at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext) at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)
The nuget packages I installed are:
Swashbuckle.AspNetCore v3.0.0
Swashbuckle.AspNetCore.Examples v2.9.0
Upvotes: 13
Views: 33179
Reputation: 528
this worked for us, while upgrading to .netcore 3.0:
1) Install-Package Swashbuckle.AspNetCore -Version 5.0.0-rc4
2) change code to
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebAPI", Version = "v1" });
});
...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env,ILoggerFactory loggerFactory)
{
...
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.RoutePrefix = "swagger/ui";
c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebAPI(v1)");
});
...
}
basically, following samples found at https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases/tag/v5.0.0-rc4
Upvotes: 6
Reputation: 2268
To make it work on later versions and in ASPNET Core you need to:
AddSwaggerGen
call ExampleFilters();
(in ConfigureServices)IExampleProvider<TargetDtoType>
where TargetDtoType
is your target type of your exampleAddSwaggerExamplesFromAssemblyOf<ExampleTypeImplementation>
where ExampleTypeImplementation is the type from step 3 that implements IExampleProvider<TargetDtoType>
This did the trick for me. No need for any action method attributes, swashbuckle picks up via the parameter type and automatically generates the examples
Upvotes: 3
Reputation: 298
Uninstalling the package
Swashbuckle.AspNetCore.Examples
should fix the issue. The new package is (haven't tried this yet)-
Swashbuckle.AspNetCore.Filters
(UPDATE) The new package works perfectly fine
Upvotes: 16
Reputation: 124
This related to several breaking changes in version 3. Here you can find more information.
To fix this try to add Swashbuckle.AspNetCore.Annotations package.
Install-Package Swashbuckle.AspNetCore.Annotations -Version 3.0.0
For dotnet core:
dotnet add package Swashbuckle.AspNetCore.Annotations --version 3.0.0
Detailed Release Notes For v3.0.0
Upvotes: 2