asp.net core 系列 16 Web主机 IWebHostBuilder

 

一.概述

         在asp.net core中,Host主机负责应用程序启动和生存期管理。host主机包括Web 主机(IWebHostBuilder)和通用主机(IHostBuilder)。Web 主机是适用于托管 Web 应用;通用主机(ASP.NET Core 2.1 或更高版本)是适用于托管非 Web 应用;在未来的版本中,通用主机将适用于托管任何类型的应用,包括 Web 应用。 通用主机最终将取代 Web 主机。本篇先来了解ASP.NET Core Web主机。

  

  1.1 设置Web主机以及执行的任务

    创建使用 IWebHostBuilder 实例的主机。 通常在应用的入口点 Main 方法中执行。 在项目模板中,Main 位于 Program.cs。

复制代码
         public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>             WebHost.CreateDefaultBuilder(args)                 .UseStartup<Startup>();
复制代码

    下面详细说下CreateDefaultBuilder 执行的下列任务:

    (1) 将内置的 Kestrel 服务器配置为 Web 服务器。

    (2) 设置content root 内容根路径,并由 Directory.GetCurrentDirectory 返回的路径。

    (3) 通过以下加载主机配置:

      前缀为 ASPNETCORE_ 的环境变量(例如,ASPNETCORE_ENVIRONMENT)。

      命令行参数。

    (4) 按以下顺序加载应用配置

      appsettings.json。

                     appsettings.{Environment}.json。

                     应用在使用入口程序集的 Development 环境中运行时的机密管理器。

                     环境变量。

                     命令行参数。

    (5) 设置console and debug 输出的日志记录。在 appsettings.json 或 appsettings.{Environment}.json 文件的日志记录配置部分(Logging)中指定的日志筛选规则。

    (6)  ASP.NET Core 模块使用IIS托管运行时,CreateDefaultBuilder 会启用 IIS 集成,这会配置应用的基址和端口。 IIS 集成还配置应用以捕获启动错误。

    (7) 如果应用环境为“开发”,请将 ServiceProviderOptions.ValidateScopes 设为 true。

 

  1.2 Web主机的扩展配置

     IWebHostBuilder下的ConfigureAppConfiguration、ConfigureLogging 以及其他方法可重写(第三大点讲)和增强 CreateDefaultBuilder 定义的配置。 下面是一些示例:

    (1) ConfigureAppConfiguration 

      ConfigureAppConfiguratio用于指定应用的 IConfiguration。下面的 ConfigureAppConfiguration 调用添加委托,以在 appsettings.xml 文件中添加应用配置。 可多次调用 ConfigureAppConfiguration。具体参照 ”asp.net core 系列 10 配置configuration“ 。

复制代码
      WebHost.CreateDefaultBuilder(args)       .ConfigureAppConfiguration((hostingContext, config) =>       {           config.AddXmlFile("appsettings.xml", optional: true, reloadOnChange: true);       })
复制代码

    (2) ConfigureLogging

      ConfigureLogging调用添加委托,以将最小日志记录级别 (SetMinimumLevel) 配置为 LogLevel.Warning。 此设置重写 CreateDefaultBuilder 在 appsettings.Development.json 和 appsettings.Production.json 中配置的设置,分别为 LogLevel.Debug 和 LogLevel.Error。 可多次调用 ConfigureLogging。具体参照 “asp.net core 系列 13 日志”。

复制代码
      WebHost.CreateDefaultBuilder(args)       .ConfigureLogging(logging =>        {           logging.SetMinimumLevel(LogLevel.Warning);       })
复制代码

    (3) ConfigureKestrel

      下面调用 ConfigureKestrel 来重写 CreateDefaultBuilder 在配置 Kestrel 时默认的 30,000,000 字节,大约为28.6MB。MaxRequestBodySize是获取或设置任何请求主体的最大允许大小(以字节为单位)。设置为null时,最大请求正文大小不受限制。

复制代码
      WebHost.CreateDefaultBuilder(args)       .ConfigureKestrel((context, options) =>       {           options.Limits.MaxRequestBodySize = 20000000;       });
复制代码

 

二.主机配置值

  WebHostBuilder 依赖于以下的方法设置主机配置值:

     (1)主机生成器配置,其中包括格式 ASPNETCORE_{configurationKey} 的环境变量。 例如 ASPNETCORE_ENVIRONMENT。

    (2)UseContentRoot 和 UseConfiguration 等扩展。

    (3)UseSetting 和关联键。 使用 UseSetting 设置值时,该值设置为无论何种类型的字符串。

  2.1  Application Key (Name)

    在主机构造期间调用 UseStartup 或 Configure 时,会自动设置 IHostingEnvironment.ApplicationName 属性。 该默认值设置为应用入口点的程序集的名称。 要显式设置值,请使用 WebHostDefaults.ApplicationKey。环境变量:ASPNETCORE_APPLICATIONNAME

关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信