Swagger Grouping With Controller Name Fallback Using Swashbuckle.AspNetCore
We’ve been using Swagger via Swashbuckle for some time with our ASP.NET Full Framework applications. As we’re moving toward ASP.NET Core we encountered some difficulty in achieving the same grouping behavior with ASP.NET Core using Swashbuckle.AspNetCore as we had with ASP.NET Full Framework.
Since [ResourceGroup("Custom Group Name")]
is no longer applicable we can use [ApiExplorerSettings(GroupName = "Custom Group Name")]
, along with the following code that includes a fallback when the GroupName
is not explicitly set:
Code
Add this to ConfigureServices
in your ASP.NET Core Startup
class:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "API", Version = "v1" });
c.TagActionsBy(api =>
{
if (api.GroupName != null)
{
return new[] { api.GroupName };
}
var controllerActionDescriptor = api.ActionDescriptor as ControllerActionDescriptor;
if (controllerActionDescriptor != null)
{
return new[] { controllerActionDescriptor.ControllerName };
}
throw new InvalidOperationException("Unable to determine tag for endpoint.");
});
c.DocInclusionPredicate((name, api) => true);
});
Now, optionally decorate controllers like:
[ApiController]
[ApiExplorerSettings(GroupName = "Custom Group Name")]
public class MyController : ControllerBase
{
// ...
}
Hope that helps!