zoukankan      html  css  js  c++  java
  • 配置文件加载

    Startup文件加载:

    /// <summary>
            /// 配置信息对象
            /// </summary>
            private readonly IConfiguration _configuration;
    
            /// <summary>
            /// 服务配置对象
            /// </summary>
            private readonly ServiceOption _serviceOption;
    
            /// <summary>
            /// 构造函数
            /// </summary>
            /// <param name="env"></param>
            public Startup(IWebHostEnvironment env)
            {
                _configuration = env.LoadSettings();
                _serviceOption = new ServiceOption
                {
                    IsUseGlobalAuthFilter = false, //全局认证过滤开关
                    IsUseJwtAuthentication = false, //JWT认证开关
                    IgnoreJsonNullValue = false, //忽略JSON空值开关
                    IsUseCap = false //CAP开关
                };
            }
    
            /// <summary>
            /// 初始化服务配置
            /// </summary>
            /// <param name="services">服务集合对象</param>
            public void ConfigureServices(IServiceCollection services)
            {
                //请在此向容器注册自定义的服务类
                services.AddScoped<MobileSessionsService>();
    
                services.InitServices(_configuration, _serviceOption);
            }

    StartupExtension文件:

    /// <summary>
            /// 加载配置文件
            /// </summary>
            /// <param name="env">环境对象</param>
            /// <returns>配置对象</returns>
            public static IConfiguration LoadSettings(this IHostEnvironment env)
            {
                Const.MachineCode = EnvUtil.WelcomeWithMakeMachineCode();
    
                var builder = new ConfigurationBuilder()
                    .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
                    .AddJsonFile("commons.json", optional: true, reloadOnChange: false)
                    .AddJsonFile($"commons.{env.EnvironmentName}.json", optional: true, reloadOnChange: false)
                    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: false)
                    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: false)
                    .AddEnvironmentVariables();
                var config = builder.Build();
    
                string appName = config["ProjectName"];
                Console.WriteLine("当前应用:" + appName);
    
                Const.GlobalConfiguration = config;
                return config;
            }
    
            /// <summary>
            /// 初始化Redis
            /// </summary>
            /// <param name="configuration"></param>
            private static void InitRedis(IConfiguration configuration)
            {
                //var redisPwd = configuration["RedisConfig:Password"];
                //var projectGroup = configuration["ProjectGroup"];
    
                ////集群模式
                //var clusterNodes = configuration.GetSection("RedisConfig:ClusterNodes").Get<List<string>>();
                //if (clusterNodes != null && clusterNodes.Count > 0)
                //{
                //    var newNodes = new List<string>();
                //    clusterNodes.ForEach(i => newNodes.Add($"{i},password={redisPwd},defaultDatabase=0,ssl=false,prefix={projectGroup}"));
                //    string urls = string.Join(";", newNodes);
                //    var redisClient = new CSRedisClient(urls);
                //    RedisHelper.Initialization(redisClient);
                //}
    
                //哨兵模式
                //string sentinelMaster = configuration["RedisConfig:SentinelMaster"];
                //var sentinelNodes = configuration.GetSection("RedisConfig:SentinelNodes").Get<List<string>>();
                //if (sentinelNodes != null && sentinelNodes.Count > 0)
                //{
                //    string connectionString = $"{sentinelMaster},password={redisPwd},defaultDatabase=0,poolsize=50,ssl=false,writeBuffer=10240,prefix={projectGroup}";
                //    var redisClient = new CSRedisClient(connectionString, sentinelNodes.ToArray());
                //    RedisHelper.Initialization(redisClient);
                //    Console.WriteLine($">>>>>>>>>>>>>>>>>>>>Redis连接信息【{EnvUtil.EnvName}】<<<<<<<<<<<<<<<<<<<<");
                //    Console.WriteLine("连接字符串:" + connectionString);
                //    Console.WriteLine("哨兵节点:" + string.Join(",", sentinelNodes));
                //}
            }
    
            /// <summary>
            /// 初始化通用服务
            /// </summary>
            /// <param name="services"></param>
            /// <param name="configuration"></param>
            public static void InitServices(this IServiceCollection services, IConfiguration configuration)
            {
                string mainConSting = configuration.GetConnectionString("Main");
                if (!string.IsNullOrWhiteSpace(mainConSting))
                    services.AddDbContext<MainDbContext>(builder => builder.UseSqlServer(mainConSting));
    
                string readConString = configuration.GetConnectionString("Read");
                if (!string.IsNullOrWhiteSpace(readConString))
                    services.AddDbContext<ReadDbContext>(builder => builder.UseSqlServer(readConString));
    
                services.AddHttpContextAccessor();
                services.AddSingleton(configuration);
    
                InitRedis(configuration);
    
                services.AddCap(options =>
                {
                    options.FailedRetryCount = 5;
                    options.UseInMemoryStorage();
                    options.UseInMemoryMessageQueue();
                    options.UseEntityFramework<MainDbContext>();
                    var rabbitMqOptions = configuration.GetSection("RabbitMQConfig").Get<RabbitMQOptions>();
                    options.UseRabbitMQ(mqOptions =>
                    {
                        mqOptions.HostName = rabbitMqOptions.HostName;
                        mqOptions.Port = rabbitMqOptions.Port;
                        mqOptions.UserName = rabbitMqOptions.UserName;
                        mqOptions.Password = rabbitMqOptions.Password;
                    });
    
                    options.UseDashboard(dashboardOptions => { dashboardOptions.PathMatch = $"/api/{configuration["ProjectPrefix"]}/cap"; });
                });
            }
    
            /// <summary>
            /// 初始化通用服务
            /// </summary>
            /// <param name="services">服务集合对象</param>
            /// <param name="configuration">配置对象</param>
            /// <param name="serviceOption">选项配置</param>
            public static void InitServices(this IServiceCollection services, IConfiguration configuration,
                ServiceOption serviceOption)
            {
                if (serviceOption.IsUseUnifiedReadDb)
                {
                    string mainConSting = configuration.GetConnectionString("Main");
                    if (!string.IsNullOrWhiteSpace(mainConSting))
                        services.AddDbContext<MainDbContext>(builder => builder.UseSqlServer(mainConSting));
                }
    
                if (serviceOption.IsUseUnifiedReadDb)
                {
                    string readConString = configuration.GetConnectionString("Read");
                    if (!string.IsNullOrWhiteSpace(readConString))
                        services.AddDbContext<ReadDbContext>(builder => builder.UseSqlServer(readConString));
                }
    
                services.AddMediatR(Assembly.GetEntryAssembly());
                services.AddHttpClient();
                services.AddOptions();
                services.AddSingleton(configuration);
                services.AddCors(options =>
                {
                    options.AddDefaultPolicy(builder => builder.AllowAnyOrigin()
                        .AllowAnyHeader().AllowAnyMethod());
                });
                services.AddControllers();
                services.AddApiVersioning(options =>
                {
                    options.DefaultApiVersion = new ApiVersion(1, 0);
                    options.AssumeDefaultVersionWhenUnspecified = true;
                    options.ReportApiVersions = true;
                    options.ApiVersionReader = new HeaderApiVersionReader("api-version");
                });
                services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>());
                services.AddMvc(options =>
                    {
                        if (serviceOption.IsUseGlobalAuthFilter)
                            options.Filters.Add(new AuthorizeFilter());
                    })
                    .AddNewtonsoftJson(options =>
                    {
                        options.SerializerSettings.ContractResolver = new DefaultContractResolver();
                        options.SerializerSettings.DateFormatHandling = DateFormatHandling.MicrosoftDateFormat;
                        options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local;
                        options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
                        options.SerializerSettings.DateFormatString = "yyyy/MM/dd HH:mm:ss.fff";
                        if (serviceOption.IgnoreJsonNullValue)
                            options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
                    })
                    .AddControllersAsServices()
                    .AddRazorRuntimeCompilation();
                services.AddHttpContextAccessor();
                if (serviceOption.IsUseCap)
                {
                    services.AddCap(options =>
                    {
                        options.FailedRetryCount = 5;
                        options.UseInMemoryStorage();
                        options.UseInMemoryMessageQueue();
                        options.UseEntityFramework<MainDbContext>();
                        var rabbitMqOptions = configuration.GetSection("RabbitMQConfig").Get<RabbitMQOptions>();
                        options.UseRabbitMQ(mqOptions =>
                        {
                            mqOptions.HostName = rabbitMqOptions.HostName;
                            mqOptions.Port = rabbitMqOptions.Port;
                            mqOptions.UserName = rabbitMqOptions.UserName;
                            mqOptions.Password = rabbitMqOptions.Password;
                        });
    
                        options.UseDashboard(dashboardOptions => { dashboardOptions.PathMatch = $"/api/{configuration["ProjectPrefix"]}/cap"; });
                    });
                }
    
                if (serviceOption.IsUseRedis)
                    InitRedis(configuration);
    
                if (serviceOption.IsUseJwtAuthentication)
                {
                    services.Configure<TokenDto>(configuration.GetSection("JwtConfig"));
                    services.Configure<AdminTokenDto>(configuration.GetSection("AdminJwtConfig"));
                    var jwtConfig = configuration.GetSection("JwtConfig").Get<TokenDto>();
                    var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtConfig.Secret));
                    services.AddSingleton(securityKey);
    
                    services.AddAuthorization(options => { options.AddPolicy("Admin", builder => builder.Requirements.Add(new AdminPolicyRequirement())); });
                    services.AddSingleton<IAuthorizationHandler, AdminAuthorizationHandler>();
    
                    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                        .AddJwtBearer(options =>
                        {
                            options.TokenValidationParameters = new TokenValidationParameters
                            {
                                ValidateIssuer = true,
                                ValidIssuer = jwtConfig.Issuer,
                                ValidateAudience = true,
                                ValidAudience = jwtConfig.Audience,
                                ClockSkew = TimeSpan.FromSeconds(0),
                                ValidateLifetime = true,
                                IssuerSigningKey = securityKey
                            };
    
                            options.Events = new JwtBearerEvents
                            {
                                OnMessageReceived = ctx =>
                                {
                                    string tmpToken = ctx.HttpContext.Request.Headers["token"].ToString();
                                    if (!string.IsNullOrWhiteSpace(tmpToken))
                                        ctx.Token = tmpToken;
                                    return Task.CompletedTask;
                                },
                                OnChallenge = ctx =>
                                {
                                    ctx.HandleResponse();
                                    if (!ctx.Response.HasStarted)
                                    {
                                        ctx.Response.Headers.Add("Access-Control-Allow-Origin", "*");
                                        ctx.Response.ContentType = "application/json";
                                        ctx.Response.StatusCode = (int) HttpStatusCode.Unauthorized;
                                        string msg;
                                        ApiCode code = ApiCode.UnLogin;
                                        if (ctx.AuthenticateFailure is SecurityTokenInvalidSignatureException)
                                        {
                                            msg = "请先登录";
                                            code = ApiCode.UnLogin;
                                        }
                                        else if (ctx.AuthenticateFailure is SecurityTokenExpiredException)
                                        {
                                            msg = "登录过期";
                                            code = ApiCode.TokenExpire;
                                        }
                                        else
                                            msg = "无权访问";
    
                                        var respObj = new ApiResult(code, msg);
                                        var json = JsonConvert.SerializeObject(respObj);
                                        ctx.Response.WriteAsync(json);
                                    }
    
                                    return Task.CompletedTask;
                                }
                            };
                        });
                }
    
                if (serviceOption.IsUseConsulReg)
                {
                    var consulConfig = configuration.GetSection("ConsulConfig").Get<ConsulConfigDto>();
                    services.AddSingleton(consulConfig);
                }
    
                if (!EnvUtil.IsProduction)
                {
                    services.AddSwaggerGen(options =>
                    {
                        options.SwaggerDoc(configuration["ProjectPrefix"], new OpenApiInfo
                        {
                            Version = "V1",
                            Title = configuration["ProjectName"] + $"接口文档({EnvUtil.EnvChineseName})",
                            Description = "本文档根据后端接口自动生成,出现在在此页面的接口代表后端已完成",
                            Contact = new OpenApiContact
                            {
                                Name = "test",
                                Email = "hr@test.com",
                                Url = new Uri("http://www.test.com")
                            },
                            License = new OpenApiLicense
                            {
                                Name = "许可声明",
                                Url = new Uri("http://www.tianping898.com")
                            }
                        });
    
                        options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
                        {
                            Description = "在下框中输入请求头中需要添加Jwt授权Token,格式为(注意中间有个空格):Bearer Token",
                            Name = "Authorization",
                            In = ParameterLocation.Header,
                            Type = SecuritySchemeType.ApiKey,
                            BearerFormat = "JWT",
                            Scheme = "Bearer"
                        });
    
                        options.AddSecurityRequirement(new OpenApiSecurityRequirement
                        {
                            {
                                new OpenApiSecurityScheme
                                {
                                    Reference = new OpenApiReference
                                    {
                                        Type = ReferenceType.SecurityScheme,
                                        Id = "Bearer"
                                    }
                                },
                                new string[] { }
                            }
                        });
    
                        options.OperationFilter<SwaggerOperationFilter>();
                        options.DocumentFilter<SwaggerHiddenApiFilter>();
                        options.DocumentFilter<SwaggerEnumFilter>();
    
                        var entryXmlFile = $"{Assembly.GetEntryAssembly()?.GetName().Name}.xml";
                        var entryXmlPath = Path.Combine(AppContext.BaseDirectory, entryXmlFile);
                        if (File.Exists(entryXmlPath))
                            options.IncludeXmlComments(entryXmlPath, true);
    
                        var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                        var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
                        if (File.Exists(xmlPath))
                            options.IncludeXmlComments(xmlPath, true);
                    });
                }
            }

    /// <summary>        /// 加载配置文件        /// </summary>        /// <param name="env">环境对象</param>        /// <returns>配置对象</returns>        public static IConfiguration LoadSettings(this IHostEnvironment env)        {            //Const.MachineCode = EnvUtil.WelcomeWithMakeMachineCode();
                //var builder = new ConfigurationBuilder()            //    .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)            //    .AddJsonFile("commons.json", optional: true, reloadOnChange: false)            //    .AddJsonFile($"commons.{env.EnvironmentName}.json", optional: true, reloadOnChange: false)            //    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: false)            //    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: false)            //    .AddEnvironmentVariables();            //var config = builder.Build();
                //string appName = config["ProjectName"];            //Console.WriteLine("当前应用:" + appName);
                //Const.GlobalConfiguration = config;            //return config;
                var settingInfo = env.InitSettings();            Const.MachineCode = settingInfo.MachineCode;            Const.GlobalConfiguration = settingInfo.Configuration;
                return Const.GlobalConfiguration;        }
            /// <summary>        /// 初始化Redis        /// </summary>        /// <param name="configuration"></param>        private static void InitRedis(IConfiguration configuration)        {            //var redisPwd = configuration["RedisConfig:Password"];            //var projectGroup = configuration["ProjectGroup"];
                ////集群模式            //var clusterNodes = configuration.GetSection("RedisConfig:ClusterNodes").Get<List<string>>();            //if (clusterNodes != null && clusterNodes.Count > 0)            //{            //    var newNodes = new List<string>();            //    clusterNodes.ForEach(i => newNodes.Add($"{i},password={redisPwd},defaultDatabase=0,ssl=false,prefix={projectGroup}"));            //    string urls = string.Join(";", newNodes);            //    var redisClient = new CSRedisClient(urls);            //    RedisHelper.Initialization(redisClient);            //}
                //哨兵模式            //string sentinelMaster = configuration["RedisConfig:SentinelMaster"];            //var sentinelNodes = configuration.GetSection("RedisConfig:SentinelNodes").Get<List<string>>();            //if (sentinelNodes != null && sentinelNodes.Count > 0)            //{            //    string connectionString = $"{sentinelMaster},password={redisPwd},defaultDatabase=0,poolsize=50,ssl=false,writeBuffer=10240,prefix={projectGroup}";            //    var redisClient = new CSRedisClient(connectionString, sentinelNodes.ToArray());            //    RedisHelper.Initialization(redisClient);            //    Console.WriteLine($">>>>>>>>>>>>>>>>>>>>Redis连接信息【{EnvUtil.EnvName}】<<<<<<<<<<<<<<<<<<<<");            //    Console.WriteLine("连接字符串:" + connectionString);            //    Console.WriteLine("哨兵节点:" + string.Join(",", sentinelNodes));            //}        }
            /// <summary>        /// 初始化通用服务        /// </summary>        /// <param name="services"></param>        /// <param name="configuration"></param>        public static void InitServices(this IServiceCollection services, IConfiguration configuration)        {            string mainConSting = configuration.GetConnectionString("Main");            if (!string.IsNullOrWhiteSpace(mainConSting))                services.AddDbContext<MainDbContext>(builder => builder.UseSqlServer(mainConSting));
                string readConString = configuration.GetConnectionString("Read");            if (!string.IsNullOrWhiteSpace(readConString))                services.AddDbContext<ReadDbContext>(builder => builder.UseSqlServer(readConString));
                services.AddHttpContextAccessor();            services.AddSingleton(configuration);
                InitRedis(configuration);
                services.AddCap(options =>            {                options.FailedRetryCount = 5;                options.UseInMemoryStorage();                options.UseInMemoryMessageQueue();                options.UseEntityFramework<MainDbContext>();                var rabbitMqOptions = configuration.GetSection("RabbitMQConfig").Get<RabbitMQOptions>();                options.UseRabbitMQ(mqOptions =>                {                    mqOptions.HostName = rabbitMqOptions.HostName;                    mqOptions.Port = rabbitMqOptions.Port;                    mqOptions.UserName = rabbitMqOptions.UserName;                    mqOptions.Password = rabbitMqOptions.Password;                });
                    options.UseDashboard(dashboardOptions => { dashboardOptions.PathMatch = $"/api/{configuration["ProjectPrefix"]}/cap"; });            });        }
            /// <summary>        /// 初始化通用服务        /// </summary>        /// <param name="services">服务集合对象</param>        /// <param name="configuration">配置对象</param>        /// <param name="serviceOption">选项配置</param>        public static void InitServices(this IServiceCollection services, IConfiguration configuration,            ServiceOption serviceOption)        {            if (serviceOption.IsUseUnifiedReadDb)            {                string mainConSting = configuration.GetConnectionString("Main");                if (!string.IsNullOrWhiteSpace(mainConSting))                    services.AddDbContext<MainDbContext>(builder => builder.UseSqlServer(mainConSting));            }
                if (serviceOption.IsUseUnifiedReadDb)            {                string readConString = configuration.GetConnectionString("Read");                if (!string.IsNullOrWhiteSpace(readConString))                    services.AddDbContext<ReadDbContext>(builder => builder.UseSqlServer(readConString));            }
                services.AddMediatR(Assembly.GetEntryAssembly());            services.AddHttpClient();            services.AddOptions();            services.AddSingleton(configuration);            services.AddCors(options =>            {                options.AddDefaultPolicy(builder => builder.AllowAnyOrigin()                    .AllowAnyHeader().AllowAnyMethod());            });            services.AddControllers();            services.AddApiVersioning(options =>            {                options.DefaultApiVersion = new ApiVersion(1, 0);                options.AssumeDefaultVersionWhenUnspecified = true;                options.ReportApiVersions = true;                options.ApiVersionReader = new HeaderApiVersionReader("api-version");            });            services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>());            services.AddMvc(options =>                {                    if (serviceOption.IsUseGlobalAuthFilter)                        options.Filters.Add(new AuthorizeFilter());                })                .AddNewtonsoftJson(options =>                {                    options.SerializerSettings.ContractResolver = new DefaultContractResolver();                    options.SerializerSettings.DateFormatHandling = DateFormatHandling.MicrosoftDateFormat;                    options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local;                    options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;                    options.SerializerSettings.DateFormatString = "yyyy/MM/dd HH:mm:ss.fff";                    if (serviceOption.IgnoreJsonNullValue)                        options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;                })                .AddControllersAsServices()                .AddRazorRuntimeCompilation();            services.AddHttpContextAccessor();            if (serviceOption.IsUseCap)            {                services.AddCap(options =>                {                    options.FailedRetryCount = 5;                    options.UseInMemoryStorage();                    options.UseInMemoryMessageQueue();                    options.UseEntityFramework<MainDbContext>();                    var rabbitMqOptions = configuration.GetSection("RabbitMQConfig").Get<RabbitMQOptions>();                    options.UseRabbitMQ(mqOptions =>                    {                        mqOptions.HostName = rabbitMqOptions.HostName;                        mqOptions.Port = rabbitMqOptions.Port;                        mqOptions.UserName = rabbitMqOptions.UserName;                        mqOptions.Password = rabbitMqOptions.Password;                    });
                        options.UseDashboard(dashboardOptions => { dashboardOptions.PathMatch = $"/api/{configuration["ProjectPrefix"]}/cap"; });                });            }
                if (serviceOption.IsUseRedis)                InitRedis(configuration);
                if (serviceOption.IsUseJwtAuthentication)            {                services.Configure<TokenDto>(configuration.GetSection("JwtConfig"));                services.Configure<AdminTokenDto>(configuration.GetSection("AdminJwtConfig"));                var jwtConfig = configuration.GetSection("JwtConfig").Get<TokenDto>();                var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtConfig.Secret));                services.AddSingleton(securityKey);
                    services.AddAuthorization(options => { options.AddPolicy("Admin", builder => builder.Requirements.Add(new AdminPolicyRequirement())); });                services.AddSingleton<IAuthorizationHandler, AdminAuthorizationHandler>();
                    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)                    .AddJwtBearer(options =>                    {                        options.TokenValidationParameters = new TokenValidationParameters                        {                            ValidateIssuer = true,                            ValidIssuer = jwtConfig.Issuer,                            ValidateAudience = true,                            ValidAudience = jwtConfig.Audience,                            ClockSkew = TimeSpan.FromSeconds(0),                            ValidateLifetime = true,                            IssuerSigningKey = securityKey                        };
                            options.Events = new JwtBearerEvents                        {                            OnMessageReceived = ctx =>                            {                                string tmpToken = ctx.HttpContext.Request.Headers["token"].ToString();                                if (!string.IsNullOrWhiteSpace(tmpToken))                                    ctx.Token = tmpToken;                                return Task.CompletedTask;                            },                            OnChallenge = ctx =>                            {                                ctx.HandleResponse();                                if (!ctx.Response.HasStarted)                                {                                    ctx.Response.Headers.Add("Access-Control-Allow-Origin", "*");                                    ctx.Response.ContentType = "application/json";                                    ctx.Response.StatusCode = (int) HttpStatusCode.Unauthorized;                                    string msg;                                    ApiCode code = ApiCode.UnLogin;                                    if (ctx.AuthenticateFailure is SecurityTokenInvalidSignatureException)                                    {                                        msg = "请先登录";                                        code = ApiCode.UnLogin;                                    }                                    else if (ctx.AuthenticateFailure is SecurityTokenExpiredException)                                    {                                        msg = "登录过期";                                        code = ApiCode.TokenExpire;                                    }                                    else                                        msg = "无权访问";
                                        var respObj = new ApiResult(code, msg);                                    var json = JsonConvert.SerializeObject(respObj);                                    ctx.Response.WriteAsync(json);                                }
                                    return Task.CompletedTask;                            }                        };                    });            }
                if (serviceOption.IsUseConsulReg)            {                var consulConfig = configuration.GetSection("ConsulConfig").Get<ConsulConfigDto>();                services.AddSingleton(consulConfig);            }
                if (!EnvUtil.IsProduction)            {                services.AddSwaggerGen(options =>                {                    options.SwaggerDoc(configuration["ProjectPrefix"], new OpenApiInfo                    {                        Version = "V1",                        Title = configuration["ProjectName"] + $"接口文档({EnvUtil.EnvChineseName})",                        Description = "本文档根据后端接口自动生成,出现在在此页面的接口代表后端已完成",                        Contact = new OpenApiContact                        {                            Name = "天平网",                            Email = "hr@TianPing.com",                            Url = new Uri("http://www.tianping898.com")                        },                        License = new OpenApiLicense                        {                            Name = "许可声明",                            Url = new Uri("http://www.tianping898.com")                        }                    });
                        options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme                    {                        Description = "在下框中输入请求头中需要添加Jwt授权Token,格式为(注意中间有个空格):Bearer Token",                        Name = "Authorization",                        In = ParameterLocation.Header,                        Type = SecuritySchemeType.ApiKey,                        BearerFormat = "JWT",                        Scheme = "Bearer"                    });
                        options.AddSecurityRequirement(new OpenApiSecurityRequirement                    {                        {                            new OpenApiSecurityScheme                            {                                Reference = new OpenApiReference                                {                                    Type = ReferenceType.SecurityScheme,                                    Id = "Bearer"                                }                            },                            new string[] { }                        }                    });
                        options.OperationFilter<SwaggerOperationFilter>();                    options.DocumentFilter<SwaggerHiddenApiFilter>();                    options.DocumentFilter<SwaggerEnumFilter>();
                        var entryXmlFile = $"{Assembly.GetEntryAssembly()?.GetName().Name}.xml";                    var entryXmlPath = Path.Combine(AppContext.BaseDirectory, entryXmlFile);                    if (File.Exists(entryXmlPath))                        options.IncludeXmlComments(entryXmlPath, true);
                        var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";                    var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);                    if (File.Exists(xmlPath))                        options.IncludeXmlComments(xmlPath, true);                });            }        }

  • 相关阅读:
    AHK的OnMessage
    VBA7种文档遍历法
    Excel VBA 找出选定范围不重复值和重复值
    Excel图片调整大小
    Excel信息提取之二
    Excel不同工作簿之间提取信息
    VBA7种遍历方法
    Exce信息提取
    php笔记之文件载入和异常处理
    php笔记之流程控制
  • 原文地址:https://www.cnblogs.com/zzgxl/p/14229555.html
Copyright © 2011-2022 走看看