/// <summary> /// 创建主机生成器 /// </summary> /// <typeparam name="TStartup"></typeparam> /// <param name="args"></param> /// <returns></returns> public IHostBuilder CreateBuilder <TStartup>(string[] args) where TStartup : StartupAbstract { var config = new ConfigurationBuilder() .SetBasePath(AppDomain.CurrentDomain.BaseDirectory) .AddJsonFile("appsettings.json", false) #if DEBUG .AddJsonFile("appsettings.Development.json", false) #endif .Build(); var hostOptions = new HostOptionsSetting(); config.GetSection("Host").Bind(hostOptions); if (hostOptions.Urls.IsNull()) { hostOptions.Urls = "http://*:5000"; } return(Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder(args) .UseDefaultServiceProvider(options => { options.ValidateOnBuild = false; }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseLogging() .UseSerilog() .UseStartup <TStartup>() .UseUrls(hostOptions.Urls); }).UseServiceProviderFactory(new AutofacServiceProviderFactory())); }
protected StartupAbstract(IHostEnvironment env, IConfiguration cfg) { Env = env; _cfg = cfg; //主机配置 _hostOptions = new HostOptionsSetting(); cfg.GetSection("Host").Bind(_hostOptions); if (_hostOptions.Urls.IsNull()) { _hostOptions.Urls = "http://*:5000"; } }
/// <summary> /// 添加WebHost /// </summary> /// <param name="services"></param> /// <param name="hostOptions"></param> /// <param name="env">环境</param> /// <param name="cfg"></param> /// <returns></returns> public static IServiceCollection AddWebHost(this IServiceCollection services, HostOptionsSetting hostOptions, IHostEnvironment env, IConfiguration cfg) { services.AddSingleton(new Appsettings(cfg)); services.AddControllers(); services.AddHttpContextAccessor(); services.AddSingleton(hostOptions); services.AddSwagger(); return(services); }
/// <summary> /// 启用WebHost /// </summary> /// <param name="app"></param> /// <param name="hostOptions"></param> /// <param name="env"></param> /// <returns></returns> public static IApplicationBuilder UseWebHost(this IApplicationBuilder app, HostOptionsSetting hostOptions, IHostEnvironment env) { //异常处理 //app.UseExceptionHandle(); //设置默认文档 //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(); }); //if (env.IsDevelopment()) //{ // app.UseDeveloperExceptionPage(); // app.UseSwagger(); // app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Lite.API v1")); //} //开启Swagger if (hostOptions.Swagger || env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint($"/swagger/V1/swagger.json", $"{"Group"} V1"); //c.IndexStream = ""; //路径配置,设置为空,表示直接在根域名(localhost:8001)访问该文件,注意localhost:8001/swagger是访问不到的, //去launchSettings.json把launchUrl去掉,如果你想换一个路径,直接写名字即可,比如直接写c.RoutePrefix = "doc"; //c.RoutePrefix = "doc"; }); } return(app); }