Exemple #1
0
        public void Configuration(IAppBuilder app)
        {
            var authorizationFilter = new BasicAuthAuthorizationFilter(
                new BasicAuthAuthorizationFilterOptions
            {
                // Require secure connection for dashboard
                RequireSsl = true,
                // Case sensitive login checking
                LoginCaseSensitive = true,
                // Users
                Users = new[]
                {
                    new BasicAuthAuthorizationUser
                    {
                        Login         = "******",
                        PasswordClear = "passW0rd!"
                    }
                }
            });

            var options = new DashboardOptions
            {
                AuthorizationFilters = new IAuthorizationFilter[]
                {
                    authorizationFilter
                }
            };

            GlobalConfiguration.Configuration.UseSqlServerStorage("DefaultConnection");

            app.UseHangfireDashboard("/hangfire", options);
            app.UseHangfireServer();

            ConfigureAuth(app);
        }
Exemple #2
0
        public static void UseAuthenticatedHangfireDashboard(this IApplicationBuilder app, IConfiguration configuration)
        {
            var filter = new BasicAuthAuthorizationFilter(
                new BasicAuthAuthorizationFilterOptions
            {
                // Require secure connection for dashboard
                RequireSsl  = false,
                SslRedirect = false,
                // Case sensitive login checking
                LoginCaseSensitive = true,
                // Users
                Users = new[]
                {
                    new BasicAuthAuthorizationUser
                    {
                        Login = configuration["Hangfire:Dashboard:Username"],
                        // Password as plain text, SHA1 will be used
                        PasswordClear = configuration["Hangfire:Dashboard:Password"]
                    }
                }
            });

            var options = new DashboardOptions
            {
                DashboardTitle = "De Urgenta Hangfire Dashboard",
                Authorization  = new IDashboardAuthorizationFilter[]
                {
                    filter
                }
            };

            app.UseHangfireDashboard(options: options);
        }
Exemple #3
0
        public static IApplicationBuilder UseHangfire(this IApplicationBuilder app)
        {
            GlobalJobFilters.Filters.Add(new OneYearExpirationTimeAttribute());

            var filter = new BasicAuthAuthorizationFilter(
                new BasicAuthAuthorizationFilterOptions
            {
                RequireSsl         = false,
                LoginCaseSensitive = true,
                Users = new[]
                {
                    new BasicAuthAuthorizationUser
                    {
                        Login         = "******",
                        PasswordClear = "Test$123"
                    }
                }
            });

            app.UseHangfireServer();
            app.UseHangfireDashboard("/hangfire", new DashboardOptions
            {
                Authorization = new List <IDashboardAuthorizationFilter>()
                                //Authorization = new[] { filter } // Basic auth with logic/password defined
                                //Authorization = new[] { new HangfireAuthorizationFilter() } // Login in the future maybe with httpContext authorization, based on role, etc.
            });

            return(app);
        }
        public static void UseHangfire(this IApplicationBuilder app, IConfiguration configuration)
        {
            ////配置访问权限
            //app.UseHangfireServer();
            //访问权限
            var authorFilter = new BasicAuthAuthorizationFilter(
                new BasicAuthAuthorizationFilterOptions
            {
                SslRedirect        = false,
                RequireSsl         = false,
                LoginCaseSensitive = false,
                Users = new[]
                {
                    new BasicAuthAuthorizationUser {
                        Login         = configuration[$"{CONFIGROOT}:AuthorConfig:UserName"],
                        PasswordClear = configuration[$"{CONFIGROOT}:AuthorConfig:Password"]
                    }
                }
            });

            app.UseHangfireDashboard(options: new DashboardOptions
            {
                Authorization = new[] { authorFilter }
            });

            var i = ConfigHelper.GetInt("HangfireConfig:Enable");

            if (i == 1)
            {
                //RecurringJob.AddOrUpdate<INewsApplicationService>(x => x.InsertNews(NewsTypeEnum.top), Cron.Hourly);
                //RecurringJob.AddOrUpdate<INewsApplicationService>(x => x.DeleteNews(), Cron.Weekly(DayOfWeek.Monday), TimeZoneInfo.Local);
            }
        }
Exemple #5
0
        public void Configuration(IAppBuilder app)
        {
            // 有关如何配置应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkID=316888
            GlobalConfiguration.Configuration
            .SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
            .UseSimpleAssemblyNameTypeSerializer()
            .UseRecommendedSerializerSettings()
            .UseSqlServerStorage("ShenOnlineJob", new SqlServerStorageOptions()
            {
                CommandBatchMaxTimeout       = TimeSpan.FromMinutes(5),
                SlidingInvisibilityTimeout   = TimeSpan.FromMinutes(5),
                QueuePollInterval            = TimeSpan.Zero,
                UseRecommendedIsolationLevel = true,
                UsePageLocksOnDequeue        = true,
                DisableGlobalLocks           = true
            })
            .UseConsole();

            GlobalConfiguration.Configuration
            .UseDashboardMetric(DashboardMetrics.AwaitingCount)
            .UseDashboardMetric(DashboardMetrics.DeletedCount)
            .UseDashboardMetric(DashboardMetrics.EnqueuedAndQueueCount)
            .UseDashboardMetric(DashboardMetrics.EnqueuedCountOrNull)
            .UseDashboardMetric(DashboardMetrics.FailedCount)
            .UseDashboardMetric(DashboardMetrics.FailedCountOrNull)
            .UseDashboardMetric(DashboardMetrics.ProcessingCount)
            .UseDashboardMetric(DashboardMetrics.RecurringJobCount)
            .UseDashboardMetric(DashboardMetrics.RetriesCount)
            .UseDashboardMetric(DashboardMetrics.ScheduledCount)
            .UseDashboardMetric(DashboardMetrics.ServerCount)
            .UseDashboardMetric(DashboardMetrics.SucceededCount)
            .UseDashboardMetric(SqlServerStorage.ActiveConnections)
            .UseDashboardMetric(SqlServerStorage.TotalConnections);

            BasicAuthAuthorizationFilter filter = new BasicAuthAuthorizationFilter(new BasicAuthAuthorizationFilterOptions
            {
                SslRedirect        = false,
                RequireSsl         = false,
                LoginCaseSensitive = true,
                Users = new[] { new BasicAuthAuthorizationUser {
                                    Login = "******", PasswordClear = "123456"
                                } }
            });
            // SslRedirect          是否将所有非SSL请求重定向到SSL URL
            // RequireSsl           需要SSL连接才能访问HangFire Dahsboard。强烈建议在使用基本身份验证时使用SSL
            // LoginCaseSensitive   登录检查是否区分大小写
            // Password             密码 SHA1 hash 【Password = new byte[] { 0x7c,0x4a,0x8d,0x09,0xca,0x37,0x62,0xaf,0x61,0xe5,0x95,0x20,0x94,0x3d,0xc2,0x64,0x94,0xf8,0x94,0x1b }】

            DashboardOptions options = new DashboardOptions {
                Authorization = new[] { filter }
            };

            app.UseHangfireDashboard("/Hangfire", options);
            //app.UseHangfireServer();
        }
Exemple #6
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }
            app.UseStaticFiles();

            app.UseRouting();
            app.UseAuthorization();
            var filter = new BasicAuthAuthorizationFilter(
                new BasicAuthAuthorizationFilterOptions
            {
                SslRedirect        = false,
                RequireSsl         = false,
                LoginCaseSensitive = false,
                Users = new[]
                {
                    new BasicAuthAuthorizationUser
                    {
                        Login         = Configuration["Hangfire:Login"],
                        PasswordClear = Configuration["Hangfire:PasswordClear"]
                    }
                }
            });

            app.UseHangfireDashboard("", new DashboardOptions
            {
                Authorization = new[]
                {
                    filter
                },
            });
            var jobOptions = new BackgroundJobServerOptions
            {
                Queues                  = new[] { "critical", "test", "default" },
                WorkerCount             = Environment.ProcessorCount * int.Parse(Configuration["Hangfire:ProcessorCount"]),
                ServerName              = Configuration["Hangfire:ServerName"],
                SchedulePollingInterval = TimeSpan.FromSeconds(1), //计划轮询间隔  支持任务到秒
            };

            app.UseHangfireServer(jobOptions);
        }
Exemple #7
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, IGlobalConfiguration hangfire, IOptions <HangfireOption> hangfireOption)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseHsts();
            }

            hangfire.UseConsole();
            hangfire.UseHangfireHttpJob();

            var filter = new BasicAuthAuthorizationFilter(new BasicAuthAuthorizationFilterOptions
            {
                // Require secure connection for dashboard
                RequireSsl = false,

                SslRedirect = false,
                // Case sensitive login checking
                LoginCaseSensitive = true,
                // Users
                Users = hangfireOption.Value.Users.Select(d => new BasicAuthAuthorizationUser
                {
                    Login         = d.UserName,
                    PasswordClear = d.Password
                })
            });

            app.UseHangfireServer(new BackgroundJobServerOptions
            {
                ServerName = "ERP background job",
            });
            app.UseHangfireDashboard("", new DashboardOptions
            {
                Authorization = new[] { filter }
            });
            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }
Exemple #8
0
        public void Configuration(IAppBuilder app)
        {
            GlobalConfiguration.Configuration.UseSqlServerStorage("Data Source=localhost;User Id=sa;Password=123456;Database=HangFireSimple;Pooling=true;Max Pool Size=5000;Min Pool Size=0;");
            var filter = new BasicAuthAuthorizationFilter(
                new BasicAuthAuthorizationFilterOptions
            {
                //SSL不启用
                SslRedirect = false,
                //需要仪表板的安全连接SSL
                RequireSsl = false,
                //区分大小写的登录检查
                LoginCaseSensitive = false,
                Users = new[]

                {
                    new BasicAuthAuthorizationUser
                    //最高管理员
                    {
                        Login         = "******",     //用户名
                        PasswordClear = "afandxx" //密码
                    },
                    //开发人员统一账号
                    new BasicAuthAuthorizationUser
                    {
                        Login         = "******", //用户名
                        PasswordClear = "romens"     //密码
                    },
                    //实施人员统一账号
                    new BasicAuthAuthorizationUser
                    {
                        Login         = "******", //用户名
                        PasswordClear = "romens"     //密码
                    },
                }
            });

            //修改映射URL
            app.UseHangfireDashboard("/TaskQueue/Manager", new DashboardOptions()
            {
                AuthorizationFilters = new[] { filter }
            });
            app.UseHangfireServer();
        }
Exemple #9
0
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            var filter = new BasicAuthAuthorizationFilter(
                new BasicAuthAuthorizationFilterOptions
            {
                SslRedirect        = false,      // 是否将所有非SSL请求重定向到SSL URL
                RequireSsl         = false,      // 需要SSL连接才能访问HangFire Dahsboard。强烈建议在使用基本身份验证时使用SSL
                LoginCaseSensitive = false,      //登录检查是否区分大小写
                Users = new[]
                {
                    new BasicAuthAuthorizationUser
                    {
                        Login         = Configuration["Hangfire:Login"],
                        PasswordClear = Configuration["Hangfire:PasswordClear"]
                    }
                }
            });

            app.UseHangfireDashboard("", new DashboardOptions
            {
                Authorization = new[]
                {
                    filter
                },
            });
            //配置要处理的队列列表 ,如果多个服务器同时连接到数据库,会认为是分布式的一份子。可以通过这个配置根据服务器性能的按比例分配请求,不会导致服务器的压力。不配置则平分请求
            var jobOptions = new BackgroundJobServerOptions
            {
                Queues      = new[] { "critical", "test", "default" },                                          //队列名称,只能为小写  排在前面的优先执行
                WorkerCount = Environment.ProcessorCount * int.Parse(Configuration["Hangfire:ProcessorCount"]), //并发任务数  --超出并发数。将等待之前任务的完成  (推荐并发线程是cpu 的 5倍)
                ServerName  = Configuration["Hangfire:ServerName"],                                             //服务器名称
            };

            app.UseHangfireServer(jobOptions);                             //启动hangfire服务
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); //这是为了防止中文乱码
            loggerFactory.AddNLog();                                       //添加NLog
            env.ConfigureNLog("nlog.config");                              //读取Nlog配置文件
            app.UseMvc();
        }
Exemple #10
0
        public bool Authorize(DashboardContext context)
        {
            var filter = new BasicAuthAuthorizationFilter(
                new BasicAuthAuthorizationFilterOptions
            {
                RequireSsl         = true,
                LoginCaseSensitive = true,
                Users = new[]
                {
                    new BasicAuthAuthorizationUser
                    {
                        Login         = ConfigurationManager.AppSettings["BasicAuth:Proximity:Key"],
                        PasswordClear = ConfigurationManager.AppSettings["BasicAuth:Proximity:Password"]
                    },
                    new BasicAuthAuthorizationUser
                    {
                        Login         = ConfigurationManager.AppSettings["BasicAuth:System:Key"],
                        PasswordClear = ConfigurationManager.AppSettings["BasicAuth:System:Password"]
                    },
                    new BasicAuthAuthorizationUser
                    {
                        Login         = ConfigurationManager.AppSettings["BasicAuth:External:Key"],
                        PasswordClear = ConfigurationManager.AppSettings["BasicAuth:External:Password"]
                    }
                }
            });

            var hasAccess = filter.Authorize(context.GetOwinEnvironment());

            if (hasAccess)
            {
                var user      = new GenericIdentity("Hangfire");
                var principal = new GenericPrincipal(user, null);
                Thread.CurrentPrincipal = principal;
            }

            return(hasAccess);
        }
Exemple #11
0
        public void Configuration(IAppBuilder app)
        {
            // 有关如何配置应用程序的详细信息,请访问 https://go.microsoft.com/fwlink/?LinkID=316888
            app.MapSignalR();

            GlobalConfiguration.Configuration.UseStorage(new MemoryStorage());


            var filter = new BasicAuthAuthorizationFilter(
                new BasicAuthAuthorizationFilterOptions
            {
                SslRedirect = false,
                // Require secure connection for dashboard
                RequireSsl = false,
                // Case sensitive login checking
                LoginCaseSensitive = false,
                // Users
                Users = new[]
                {
                    new BasicAuthAuthorizationUser
                    {
                        Login = "******",    //用户名 Password01!
                        // Password as SHA1 hash
                        Password = new byte[] { 0x58, 0x1d, 0xb3, 0x1d, 0x94, 0x0f, 0xe9, 0x62, 0x25, 0xfa, 0xf4, 0x5b, 0x1a, 0x14, 0x82, 0x50, 0x35, 0x0d, 0x35, 0x3b }
                    }
                }
            });
            var options = new DashboardOptions
            {
                AppPath = VirtualPathUtility.ToAbsolute("~"),
                AuthorizationFilters = new IAuthorizationFilter[] { filter }
            };

            app.UseHangfireDashboard("/hangfire", options);
            app.UseHangfireServer();
            StaticData.InitStationConfig();
            //  InitBackgroundJob();
        }
        /// <summary>
        /// 配置账号模板信息
        /// </summary>
        /// <returns></returns>
        public static DashboardOptions HfAuthor()
        {
            var filter = new BasicAuthAuthorizationFilter(
                new BasicAuthAuthorizationFilterOptions
            {
                SslRedirect        = false,
                RequireSsl         = false,
                LoginCaseSensitive = false,
                Users = new[]
                {
                    new BasicAuthAuthorizationUser
                    {
                        Login         = "******", //可视化的登陆账号
                        PasswordClear = "admin"  //可视化的密码
                    }
                }
            });

            return(new DashboardOptions
            {
                Authorization = new[] { filter }
            });
        }
Exemple #13
0
        public void Configure(IApplicationBuilder app, IConfiguration Configuration)
        {
            app.InitializeApplication();
            app.UseAuthorization();
            var filter = new BasicAuthAuthorizationFilter(
                new BasicAuthAuthorizationFilterOptions
            {
                SslRedirect        = false,
                RequireSsl         = false,
                LoginCaseSensitive = false,
                Users = new[]
                {
                    new BasicAuthAuthorizationUser
                    {
                        Login         = Configuration["Hangfire:Login"],
                        PasswordClear = Configuration["Hangfire:PasswordClear"]
                    }
                }
            });

            app.UseHangfireDashboard("", new DashboardOptions
            {
                Authorization = new[]
                {
                    filter
                },
            });
            var jobOptions = new BackgroundJobServerOptions
            {
                Queues                  = new[] { "critical", "test", "default" },
                WorkerCount             = Environment.ProcessorCount * int.Parse(Configuration["Hangfire:ProcessorCount"]),
                ServerName              = Configuration["Hangfire:ServerName"],
                SchedulePollingInterval = TimeSpan.FromSeconds(1), //计划轮询间隔  支持任务到秒
            };

            app.UseHangfireServer(jobOptions);
        }
Exemple #14
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
            }

            app.GetServiceProvider();
            app.UseSession();
            //静态文件
            app.UseStaticFiles();
            //认证
            app.UseAuthentication();
            //路由
            app.UseRouting();
            //授权
            app.UseAuthorization();
            //使用HangFire自动化任务调度
            var hangJobOption = new BackgroundJobServerOptions()
            {
                //服务器名字
                ServerName = Environment.MachineName,
                //最大并行数
                WorkerCount = 3,
                //执行任务队列
                Queues = new string[] { "default", "api" }
            };

            app.UseHangfireServer(hangJobOption);
            //设置HangFire控制面板权限验证
            var hangJobAuth = new BasicAuthAuthorizationFilter(
                new BasicAuthAuthorizationFilterOptions
            {
                //加密重定向
                SslRedirect = false,
                //需要Ssl  Https
                RequireSsl = false,
                //忽略大小写
                LoginCaseSensitive = false,
                Users = new[]
                {
                    //配置账号密码
                    new BasicAuthAuthorizationUser
                    {
                        Login         = "******",
                        Password      = Encoding.UTF8.GetBytes("CommonSystem"),
                        PasswordClear = "CommonSystem"
                    }
                }
            }
                );

            //改变原本访问后台任务路径
            app.UseHangfireDashboard("/TaskManager", new DashboardOptions
            {
                Authorization = new[]
                {
                    hangJobAuth
                }
            });
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(name: "Default", pattern: "{Controller=Home}/{Action=Index}/{id?}");
                endpoints.MapRazorPages();
            });
            #warning  待添加
            //记录访问 记录Middleware
            app.UseMiddleware <VisitMiddleWare>();
            //初始化数据库及初始数据
            Task.Run(async() =>
            {
                using (var scope = app.ApplicationServices.CreateScope())
                {
                    var meuns     = MeunHelper.GetMeunes();
                    var dbservice = scope.ServiceProvider.GetService <IDatabaseInitService>();
                    await dbservice.InitAsync(meuns);
                }
            });

            //添加一个每天自动在凌晨的时候执行的统计任务    待完善
            //RecurringJob.AddOrUpdate<ISiteViewService>(x => x.AddOrUpdate(), Cron.Daily());
            //RecurringJob.AddOrUpdate<Test>(n=>n.TestConsoleStr(DateTime.Now.ToString()), Cron.Minutely());
        }
Exemple #15
0
        /// <summary>
        ///     This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        /// </summary>
        /// <param name="app"></param>
        /// <param name="env"></param>
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IOptions <SenparcSetting> senparcSetting,
                              IOptions <SenparcWeixinSetting> senparcWeixinSetting)
        {
            // 记录请求与返回数据  (注意开启权限,不然本地无法写入)
            app.UseReuestResponseLog();
            // 记录ip请求 (注意开启权限,不然本地无法写入)
            app.UseIpLogMildd();
            // signalr
            app.UseSignalRSendMildd();

            //强制显示中文
            //System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CN");
            var supportedCultures = new[]
            {
                new System.Globalization.CultureInfo("zh-CN"),
                //new CultureInfo("en-US")
            };

            app.UseRequestLocalization(new RequestLocalizationOptions
            {
                DefaultRequestCulture   = new RequestCulture("zh-CN"),
                SupportedCultures       = supportedCultures,
                SupportedUICultures     = supportedCultures,
                RequestCultureProviders = new List <IRequestCultureProvider>
                {
                    new QueryStringRequestCultureProvider(),
                    new CookieRequestCultureProvider(),
                    new AcceptLanguageHeaderRequestCultureProvider()
                }
            });

            #region Hangfire定时任务

            var queues = new string[] { [email protected](), GlobalEnumVars.HangFireQueuesConfig.apis.ToString(), GlobalEnumVars.HangFireQueuesConfig.web.ToString(), GlobalEnumVars.HangFireQueuesConfig.recurring.ToString() };
            app.UseHangfireServer(new BackgroundJobServerOptions
            {
                ServerTimeout           = TimeSpan.FromMinutes(4),
                SchedulePollingInterval = TimeSpan.FromSeconds(15),    //秒级任务需要配置短点,一般任务可以配置默认时间,默认15秒
                ShutdownTimeout         = TimeSpan.FromMinutes(30),    //超时时间
                Queues      = queues,                                  //队列
                WorkerCount = Math.Max(Environment.ProcessorCount, 20) //工作线程数,当前允许的最大线程,默认20
            });

            //授权
            var filter = new BasicAuthAuthorizationFilter(
                new BasicAuthAuthorizationFilterOptions
            {
                SslRedirect = false,
                // Require secure connection for dashboard
                RequireSsl = false,
                // Case sensitive login checking
                LoginCaseSensitive = false,
                // Users
                Users = new[]
                {
                    new BasicAuthAuthorizationUser
                    {
                        Login         = AppSettingsHelper.GetContent("HangFire", "Login"),
                        PasswordClear = AppSettingsHelper.GetContent("HangFire", "PassWord")
                    }
                }
            });
            var options = new DashboardOptions
            {
                AppPath = "/",                          //返回时跳转的地址
                DisplayStorageConnectionString = false, //是否显示数据库连接信息
                Authorization  = new[] { filter },
                IsReadOnlyFunc = Context =>
                {
                    return(false);//是否只读面板
                }
            };

            app.UseHangfireDashboard("/job", options); //可以改变Dashboard的url
            HangfireDispose.HangfireService();

            #endregion

            app.UseSwagger().UseSwaggerUI(c =>
            {
                //根据版本名称倒序 遍历展示
                typeof(CustomApiVersion.ApiVersions).GetEnumNames().OrderByDescending(e => e).ToList().ForEach(
                    version =>
                {
                    c.SwaggerEndpoint($"/swagger/{version}/swagger.json", $"Doc {version}");
                });
                c.RoutePrefix = "doc";
            });

            //使用 Session
            app.UseSession();

            if (env.IsDevelopment())
            {
                // 在开发环境中,使用异常页面,这样可以暴露错误堆栈信息,所以不要放在生产环境。
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }



            //配置跨域(CORS)
            app.UseCors("cors");
            // 使用cookie
            app.UseCookiePolicy();
            // 返回错误码
            app.UseStatusCodePages();
            // Routing
            app.UseRouting();

            // 启动 CO2NET 全局注册,必须!
            app.UseSenparcGlobal(env, senparcSetting.Value, globalRegister => { }, true)
            .UseSenparcWeixin(senparcWeixinSetting.Value,
                              weixinRegister =>
            {
                weixinRegister.RegisterMpAccount(senparcWeixinSetting.Value, "公众号")
                .RegisterWxOpenAccount(senparcWeixinSetting.Value, "程序");
            });
            //使用 公众号 MessageHandler 中间件
            app.UseMessageHandlerForMp("/WeixinAsync", CustomMessageHandler.GenerateMessageHandler, options =>
            {
                options.AccountSettingFunc = context => senparcWeixinSetting.Value;
                //对 MessageHandler 内异步方法未提供重写时,调用同步方法(按需)
                options.DefaultMessageHandlerAsyncEvent = DefaultMessageHandlerAsyncEvent.SelfSynicMethod;
            });
            //使用 小程序 MessageHandler 中间件
            app.UseMessageHandlerForWxOpen("/WxOpenAsync", CustomWxOpenMessageHandler.GenerateMessageHandler, options =>
            {
                options.DefaultMessageHandlerAsyncEvent = DefaultMessageHandlerAsyncEvent.SelfSynicMethod;
                options.AccountSettingFunc = context => senparcWeixinSetting.Value;
            });


            // 跳转https
            //app.UseHttpsRedirection();
            // 使用静态文件
            app.UseStaticFiles();

            // 先开启认证
            app.UseAuthentication();
            // 然后是授权中间件
            app.UseAuthorization();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    "areas",
                    "{area:exists}/{controller=Default}/{action=Index}/{id?}"
                    );

                endpoints.MapControllerRoute(
                    "default",
                    "{controller=Home}/{action=Index}/{id?}");
            });

            //设置默认起始页(如default.html)
            //此处的路径是相对于wwwroot文件夹的相对路径
            //var defaultFilesOptions = new DefaultFilesOptions();
            //defaultFilesOptions.DefaultFileNames.Clear();
            //defaultFilesOptions.DefaultFileNames.Add("index.html");
            //app.UseDefaultFiles(defaultFilesOptions);
            //app.UseStaticFiles();
        }