- ABP Framework version: v5.2.1
- UI Type: Angular / MVC / Blazor WASM / Blazor Server
- Database System: EF Core (PostgreSQL)
- Tiered (for MVC) or Auth Server Separated (for Angular): yes/no
- Exception message and full stack trace:
- Steps to reproduce the issue:
I want two swagger UI in one swagger there is default apis which are in default in abp.io project like identity server/client,languages,users,roles etc and in other swagger i want only my created app services apis how can i achieve this?
7 Answer(s)
-
0
Hi
please check this guide to generate two endpoints in a swagger https://github.com/domaindrivendev/Swashbuckle.AspNetCore#generate-multiple-swagger-documents
you can then add
[ApiExplorerSettings(GroupName = "v2")]
in each controller of your api.let me know if you face any issue
-
0
i tried this but Apis of identity server also shows in swagger i dont want that apis in v2 swagger
[ApiExplorerSettings(GroupName = "v2")] public class SampleAPIAppService : ImageProcessingAPIAppService { [HttpGet] [ApiExplorerSettings(GroupName = "v2")] public int GetVersion() { return 1; } }
in Web Module of project
private void ConfigureSwaggerServices(IServiceCollection services) { services.AddAbpSwaggerGen( options => { options.SwaggerDoc("v1", new OpenApiInfo { Title = "ImageProcessingAPI API", Version = "v1" }); options.SwaggerDoc("v2", new OpenApiInfo { Title = "ImageProcessingAPI API V2", Version = "v2" }); options.DocInclusionPredicate((docName, description) => true); options.CustomSchemaIds(type => type.FullName); } ); }
app.UseAbpSwaggerUI(options => { options.SwaggerEndpoint("/swagger/v1/swagger.json", "ImageProcessingAPI API"); options.SwaggerEndpoint("/swagger/v2/swagger.json", "ImageProcessingAPI API V2"); });
-
0
You can conditionally hide endpoints using the DocInclusionPredicate. At the moment, it always returns true in the code you shared.
Here's some inspiration:
private static void ConfigureSwaggerServices(ServiceConfigurationContext context, IConfiguration configuration) { context.Services.AddAbpSwaggerGenWithOAuth( configuration["AuthServer:Authority"], new Dictionary<string, string> { {"Something", "Something API"} }, options => { options.SwaggerDoc("v1", new OpenApiInfo { Title = "Something API - V1", Version = "v1" }); options.DocInclusionPredicate((docName, description) => { return description.ActionDescriptor.IsControllerAction() && docName switch { "v1" => description.GroupName == null || description.GroupName == "v1", "v2" => description.GroupName == null || description.GroupName == "v2", _ => false, }; //if (!description.TryGetMethodInfo(out MethodInfo methodInfo)) // return false; //var versions = methodInfo.DeclaringType // .GetCustomAttributes(true) // .OfType<ApiVersionAttribute>() // .SelectMany(attr => attr.Versions); //return true; //return versions.Any(v => $"v{v}" == docName); }); options.IgnoreObsoleteActions(); options.IgnoreObsoleteProperties(); options.CustomSchemaIds(SwaggerCustomizations.GenerateSchemaId); options.CustomOperationIds(SwaggerCustomizations.GenerateOperationId); }); }
-
0
Thank you this is working, but i want two swagger ui in one there is my apis with JWT auth and in 2nd swagger there is default apis of abp, identity server etc there is no token required. for my apis default route /swagger for abp / identity server /admin/swagger
private void ConfigureSwaggerServices(IServiceCollection services) { services.AddAbpSwaggerGen( options => { options.SwaggerDoc("v1", new OpenApiInfo { Title = "ImageProcessingAPI API", Version = "v1" }); options.SwaggerDoc("v2", new OpenApiInfo { Title = "ImageProcessingAPI API V2",Description="v2" , Version = "v2" }); options.DocInclusionPredicate((docName, description) => { return description.ActionDescriptor.IsControllerAction() && docName switch { "v2" => description.GroupName == null || description.GroupName == "v1", "v1" => description.GroupName == null || description.GroupName == "v2", _ => description.GroupName == null || description.GroupName == "v2", }; }); options.IgnoreObsoleteActions(); options.IgnoreObsoleteProperties(); options.CustomSchemaIds(type => type.FullName); } ); }
-
0
You may refer to this:
https://github.com/aspnetboilerplate/aspnetboilerplate/issues/3354#issuecomment-393793398
or this:
https://github.com/domaindrivendev/Swashbuckle.AspNetCore#generate-multiple-swagger-documents
you basically add some extra source to your
OnApplicationInitialization
with something like:app.UseSwaggerUI(options => { options.SwaggerEndpoint("/swagger/v1/swagger.json", "AbpProjectName API V1"); options.SwaggerEndpoint("/swagger/v2/swagger.json", "AbpProjectName API V2"); }
-
0
this add versions in dropdown of swagger ui i want two swagger ui on diff routes like
/admin/swagger /public/swagger
like that
-
0
this add versions in dropdown of swagger ui i want two swagger ui on diff routes like
/admin/swagger /public/swagger
like that
can you try this? https://stackoverflow.com/a/77216365