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 WIDESEAWCS_Core.Helper; using static WIDESEAWCS_Core.Extensions.CustomApiVersion; using Swashbuckle.AspNetCore.Filters; using Microsoft.Extensions.Logging; using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; namespace WIDESEAWCS_Core.Extensions { /// /// Swagger /// public static class SwaggerSetup { /// /// Swagger /// /// /// public static void AddSwaggerSetup(this IServiceCollection services) { if (services == null) throw new ArgumentNullException(nameof(services)); var basePath = AppContext.BaseDirectory; //var basePath2 = Microsoft.DotNet.PlatformAbstractions.ApplicationEnvironment.ApplicationBasePath; var ApiName = AppSettings.app(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, }); c.OrderActionsBy(o => o.RelativePath); }); c.UseInlineDefinitionsForEnums(); try { //这个就是刚刚配置的xml文件名 //var xmlPath = Path.Combine(basePath, "WIDESEAWCS_Server.xml"); //默认的第二个参数是false,这个是controller的注释,记得修改 //c.IncludeXmlComments(xmlPath, true); //这个就是Model层的xml文件名 //var xmlModelPath = Path.Combine(basePath, "WIDESEAWCS_Server.Model.xml"); //c.IncludeXmlComments(xmlModelPath); } catch (Exception ex) { //log.Error("Blog.Core.xml和Blog.Core.Model.xml 丢失,请检查并拷贝。\n" + ex.Message); } // 开启加权小锁 c.OperationFilter(); c.OperationFilter(); // 在header中添加token,传递到后台 c.OperationFilter(); 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(); } } /// /// 自定义版本 /// public class CustomApiVersion { /// /// Api接口版本 自定义 /// public enum ApiVersions { /// /// V1 版本 /// V1 = 1, /// /// V2 版本 /// V2 = 2, } } }