SwaggerExtension.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using Microsoft.OpenApi.Models;
  2. using Swashbuckle.AspNetCore.Filters;
  3. using System.Reflection;
  4. namespace AipGateway.API.Extensions
  5. {
  6. public static class SwaggerExtension
  7. {
  8. public static IServiceCollection UseSwagger(this IServiceCollection services, IWebHostEnvironment env)
  9. {
  10. string xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
  11. services.AddSwaggerGen(c =>
  12. {
  13. c.SwaggerDoc("v1", new OpenApiInfo
  14. {
  15. Version = "v1",
  16. Title = "Azure Information Protection RESTFull API Service Gateway",
  17. Description = $"{(env.IsDevelopment() ? "Development" : "Production")} Environment",
  18. });
  19. c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
  20. c.OperationFilter<SecurityRequirementsOperationFilter>(true, "Bearer");
  21. c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
  22. {
  23. Description = "Standard Authorization header using the Bearer scheme (JWT).",
  24. Name = "Authorization",
  25. Scheme = "Bearer",
  26. Type = SecuritySchemeType.Http,
  27. In = ParameterLocation.Header,
  28. });
  29. c.AddSecurityRequirement(new OpenApiSecurityRequirement
  30. {
  31. {
  32. new OpenApiSecurityScheme
  33. {
  34. Reference = new OpenApiReference
  35. {
  36. Type = ReferenceType.SecurityScheme,
  37. Id = "Bearer"
  38. }
  39. },
  40. Array.Empty<string>()
  41. }
  42. });
  43. c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
  44. c.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename));
  45. c.OperationFilter<SecurityRequirementsOperationFilter>(true, "Bearer");
  46. c.OperationFilter<AppendAuthorizeToSummaryOperationFilter>();
  47. c.EnableAnnotations();
  48. });
  49. //services.AddFluentValidationRulesToSwagger();
  50. return services;
  51. }
  52. }
  53. }