|   | 
| using Microsoft.Extensions.DependencyInjection; | 
| using Microsoft.OpenApi.Models; | 
| using System; | 
| using System.Collections.Generic; | 
| using System.Linq; | 
| using System.Runtime.InteropServices; | 
| using System.Text; | 
| using System.Threading.Tasks; | 
| using WIDESEA_Core.Helper; | 
| using static WIDESEA_Core.Extensions.CustomApiVersion; | 
| using Swashbuckle.AspNetCore.Filters; | 
|   | 
| namespace WIDESEA_Core.Extensions | 
| { | 
|     /// <summary> | 
|     /// Swagger  | 
|     /// </summary> | 
|     public static class SwaggerSetup | 
|     { | 
|         /// <summary> | 
|         /// Swagger | 
|         /// </summary> | 
|         /// <param name="services"></param> | 
|         /// <exception cref="ArgumentNullException"></exception> | 
|         public static void AddSwaggerSetup(this IServiceCollection services) | 
|         { | 
|             if (services == null) throw new ArgumentNullException(nameof(services)); | 
|   | 
|             var basePath = AppDomain.CurrentDomain.BaseDirectory; | 
|             //var basePath2 = Microsoft.DotNet.PlatformAbstractions.ApplicationEnvironment.ApplicationBasePath; | 
|             var ApiName = AppSettings.Get(new string[] { "ApiName" }); | 
|   | 
|             services.AddSwaggerGen(c => | 
|             { | 
|                 //遍历出全部的版本,做文档信息展示 | 
|                 typeof(ApiVersions).GetEnumNames().ToList().ForEach(version => | 
|                 { | 
|                     c.SwaggerDoc(version, new OpenApiInfo | 
|                     { | 
|                         Version = version, | 
|                         Title = $"{ApiName} 接口文档——{RuntimeInformation.FrameworkDescription}", | 
|                         Description = $"{ApiName} HTTP API " + version, | 
|                         //Contact = new OpenApiContact { Name = ApiName, Email = "Blog.Core@xxx.com", Url = new Uri("https://neters.club") }, | 
|                         //License = new OpenApiLicense { Name = ApiName + " 官方文档", Url = new Uri("http://apk.neters.club/.doc/") } | 
|                     }); | 
|                     //c.OrderActionsBy(o => o.RelativePath); | 
|                 }); | 
|   | 
|                 c.UseInlineDefinitionsForEnums(); | 
|                 try | 
|                 { | 
|                     var xmlPath = Path.Combine(basePath, "WIDESEA_WMSServer.xml"); | 
|                     //默认的第二个参数是false,这个是controller的注释,记得修改 | 
|                     c.IncludeXmlComments(xmlPath, true); | 
|   | 
|                     var xmlModelPath = Path.Combine(basePath, "WIDESEA_Model.xml"); | 
|                     c.IncludeXmlComments(xmlModelPath); | 
|   | 
|                     var xmlDTOPath = Path.Combine(basePath, "WIDESEA_DTO.xml"); | 
|                     c.IncludeXmlComments(xmlDTOPath); | 
|                 } | 
|                 catch (Exception ex) | 
|                 { | 
|                     //log.Error("Blog.Core.xml和Blog.Core.Model.xml 丢失,请检查并拷贝。\n" + ex.Message); | 
|                 } | 
|   | 
|                 // 开启加权小锁 | 
|                 c.OperationFilter<AddResponseHeadersFilter>(); | 
|                 c.OperationFilter<AppendAuthorizeToSummaryOperationFilter>(); | 
|   | 
|                 // 在header中添加token,传递到后台 | 
|                 //c.OperationFilter<SecurityRequirementsOperationFilter>(); | 
|   | 
|                 c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme | 
|                 { | 
|                     Description = "JWT授权token前面需要加上字段Bearer与一个空格,如Bearer token", | 
|                     Name = "Authorization", | 
|                     In = ParameterLocation.Header, | 
|                     Type = SecuritySchemeType.ApiKey, | 
|                     BearerFormat = "JWT", | 
|                     Scheme = "Bearer" | 
|                 }); | 
|   | 
|                 c.AddSecurityRequirement(new OpenApiSecurityRequirement | 
|                 { | 
|                     { | 
|                         new OpenApiSecurityScheme | 
|                         { | 
|                             Reference = new OpenApiReference { | 
|                                 Type = ReferenceType.SecurityScheme, | 
|                                 Id = "Bearer" | 
|                             } | 
|                         }, | 
|                         new string[] { } | 
|                     } | 
|                 }); | 
|             }).AddControllers() | 
|             .ConfigureApiBehaviorOptions(options => | 
|             { | 
|                 options.SuppressConsumesConstraintForFormFileParameters = true; | 
|                 options.SuppressInferBindingSourcesForParameters = true; | 
|                 options.SuppressModelStateInvalidFilter = true; | 
|                 options.SuppressMapClientErrors = true; | 
|                 options.ClientErrorMapping[404].Link = | 
|                     "https://*/404"; | 
|             }); | 
|             //services.AddSwaggerGenNewtonsoftSupport(); | 
|         } | 
|     } | 
|   | 
|     /// <summary> | 
|     /// 自定义版本 | 
|     /// </summary> | 
|     public class CustomApiVersion | 
|     { | 
|         /// <summary> | 
|         /// Api接口版本 自定义 | 
|         /// </summary> | 
|         public enum ApiVersions | 
|         { | 
|             /// <summary> | 
|             /// V1 版本 | 
|             /// </summary> | 
|             V1 = 1, | 
|             /// <summary> | 
|             /// V2 版本 | 
|             /// </summary> | 
|             V2 = 2, | 
|         } | 
|     } | 
| } |