protected StartupAbstract(IHostEnvironment env) { Env = env; var cfgHelper = new ConfigurationHelper(); //加载主机配置项 HostOptions = cfgHelper.Get <HostOptions>("Host", env.EnvironmentName) ?? new HostOptions(); }
/// <summary> /// 启用WebHost /// </summary> /// <param name="app"></param> /// <param name="hostOptions"></param> /// <param name="env"></param> /// <returns></returns> public static IApplicationBuilder UseWebHost(this IApplicationBuilder app, HostOptions hostOptions, IHostEnvironment env) { //异常处理 app.UseExceptionHandle(); //加载模块 app.UseModules(env); //设置默认文档 var defaultFilesOptions = new DefaultFilesOptions(); defaultFilesOptions.DefaultFileNames.Clear(); defaultFilesOptions.DefaultFileNames.Add("index.html"); app.UseDefaultFiles(defaultFilesOptions); app.UseDefaultPage(); app.UseDocs(); //反向代理 if (hostOptions.Proxy) { app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto }); } //路由 app.UseRouting(); //CORS app.UseCors("Default"); //认证 app.UseAuthentication(); //授权 app.UseAuthorization(); //配置端点 app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); //开启Swagger if (hostOptions.Swagger || env.IsDevelopment()) { app.UseCustomSwagger(); } return(app); }
/// <summary> /// 添加WebHost /// </summary> /// <param name="services"></param> /// <param name="hostOptions"></param> /// <param name="env">环境</param> /// <returns></returns> public static IServiceCollection AddWebHost(this IServiceCollection services, HostOptions hostOptions, IHostEnvironment env) { services.AddSingleton(hostOptions); services.AddUtils(); services.AddUtilsMvc(); //加载模块 var modules = services.AddModules(env.EnvironmentName); //添加对象映射 services.AddMappers(modules); //添加缓存 services.AddCache(env.EnvironmentName); //主动或者开发模式下开启Swagger if (hostOptions.Swagger || env.IsDevelopment()) { services.AddSwagger(modules); } //Jwt身份认证 services.AddJwtAuth(env.EnvironmentName); //添加MVC功能 services.AddMvc(c => { if (hostOptions.Swagger || env.IsDevelopment()) { //API分组约定 c.Conventions.Add(new ApiExplorerGroupConvention()); } //模块中的MVC配置 foreach (var module in modules) { ((ModuleDescriptor)module).Initializer?.ConfigureMvc(c); } }) .AddNewtonsoftJson(options => { //设置日期格式化格式 options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; }) .AddValidators(services) //添加验证器 .SetCompatibilityVersion(CompatibilityVersion.Version_3_0); //CORS services.AddCors(options => { options.AddPolicy("Default", builder => builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader() .WithExposedHeaders("Content-Disposition")); //下载文件时,文件名称会保存在headers的Content-Disposition属性里面 }); //添加数据库,数据库依赖ILoginInfo,所以需要在添加身份认证以及MVC后添加数据库 services.AddDb(env.EnvironmentName, modules); //解决Multipart body length limit 134217728 exceeded services.Configure <FormOptions>(x => { x.ValueLengthLimit = int.MaxValue; x.MultipartBodyLengthLimit = int.MaxValue; }); //添加HttpClient相关 services.AddHttpClient(); //添加模块的自定义服务 services.AddModuleServices(modules); return(services); }