- 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
Markdown supported.Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post) -
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"); });
Markdown supported.Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post) -
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); }); }Markdown supported.Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post) -
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); } ); }
Markdown supported.Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post) -
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
OnApplicationInitializationwith something like:app.UseSwaggerUI(options => { options.SwaggerEndpoint("/swagger/v1/swagger.json", "AbpProjectName API V1"); options.SwaggerEndpoint("/swagger/v2/swagger.json", "AbpProjectName API V2"); }Markdown supported.Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post) -
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
Markdown supported.Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)