/// <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()));
        }
Exemple #2
0
        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);
        }