欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ASP.NET?Core配置和管理Web主機

 更新時間:2022年04月07日 14:20:55   作者:暗斷腸  
這篇文章介紹了ASP.NET?Core配置和管理Web主機的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

1.前言

ASP.NET Core應(yīng)用程序可以配置和啟動主機(Host)。主機負責(zé)應(yīng)用程序啟動和生命周期管理,配置服務(wù)器和請求處理管道。主機還可以設(shè)置日志記錄、依賴關(guān)系注入和配置。而Host主機又包括Web主機(IWebHostBuilder)和通用主機(IHostBuilder)。該章節(jié)主要介紹了用于托管Web應(yīng)用的Web主機。對于其他類型的應(yīng)用,請使用通用主機。

2.設(shè)置主機

創(chuàng)建使用IWebHostBuilder實例的主機。通常在應(yīng)用程序的入口點來執(zhí)行Main方法。在項目模板中,Main位于Program.cs。典型應(yīng)用默認調(diào)用CreateDefaultBuilder來開始創(chuàng)建主機:

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }
    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

2.1執(zhí)行下列任務(wù)

調(diào)用CreateDefaultBuilder的代碼位于名為CreateWebHostBuilder的方法中,這讓它區(qū)分于 Main中對生成器對象調(diào)用Run的代碼。CreateDefaultBuilder執(zhí)行下列任務(wù):
●使用應(yīng)用程序的托管配置提供應(yīng)用程序?qū)estrel服務(wù)器配置為Web服務(wù)器。
●將內(nèi)容根設(shè)置為由 Directory.GetCurrentDirectory返回的路徑。
●通過以下對象加載主機配置:
  ○前綴為ASPNETCORE_的環(huán)境變量(例如,ASPNETCORE_ENVIRONMENT)。
  ○命令行參數(shù)。
●按以下順序加載應(yīng)用程序配置:
  ○appsettings.json。
  ○appsettings.{Environment}.json。
  ○應(yīng)用在使用入口程序集的Development環(huán)境中運行時的機密管理器。
  ○環(huán)境變量。
  ○命令行參數(shù)。
●配置控制臺和調(diào)試輸出的日志記錄。日志記錄包含appsettings.json或appsettings.{Environment}.json文件的日志記錄配置部分中指定的日志篩選規(guī)則。
●使用ASP.NET Core模塊在IIS后面運行時,CreateDefaultBuilder會啟用IIS集成,這會配置應(yīng)用程序的基址和端口。IIS集成還配置應(yīng)用程序以捕獲啟動錯誤。
●如果應(yīng)用環(huán)境為“開發(fā)(Development)”,請將ServiceProviderOptions.ValidateScopes設(shè)為true。

2.2重寫和增強定義的配置

ConfigureAppConfiguration、ConfigureLogging以及IWebHostBuilder的其他方法和擴展方法可重寫和增強CreateDefaultBuilder定義的配置。下面是一些示例:
ConfigureAppConfiguration:用于指定應(yīng)用程序的其他IConfiguration。下面的ConfigureAppConfiguration調(diào)用添加委托,以在appsettings.xml文件中添加應(yīng)用程序配置,該示例在Core系列第11章節(jié)有演示??啥啻握{(diào)用ConfigureAppConfiguration。請注意,此配置不適用于主機(例如,服務(wù)器URL或環(huán)境)。

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
    .ConfigureAppConfiguration((hostingContext, config) =>
    {
        config.AddXmlFile("appsettings.xml", optional: true, reloadOnChange: true);
});

ConfigureLogging:ConfigureLogging調(diào)用添加委托,將最小日志記錄級別 (SetMinimumLevel)配置為LogLevel.Warning。此設(shè)置重寫CreateDefaultBuilder在appsettings.Development.json和appsettings.Production.json中配置,分別為LogLevel.Debug和LogLevel.Error。可多次調(diào)用 ConfigureLogging。

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
    .ConfigureLogging(logging =>
    {
        logging.SetMinimumLevel(LogLevel.Warning);
});

ConfigureKestrel:調(diào)用ConfigureKestrel來重寫CreateDefaultBuilder在配置Kestrel時建立的30,000,000字節(jié)默認Limits.MaxRequestBodySize:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
    .ConfigureKestrel((context, options) =>
    {
        options.Limits.MaxRequestBodySize = 20000000;
});

設(shè)置主機時,可以提供配置和ConfigureServices方法。如果指定Startup類,必須定義Configure方法。

3.主機配置值

WebHostBuilder依賴于以下的方法設(shè)置主機配置值:
●主機生成器配置,其中包括格式ASPNETCORE_{configurationKey}的環(huán)境變量。例如 ASPNETCORE_ENVIRONMENT。
●UseContentRoot和UseConfiguration等擴展。
●UseSetting和關(guān)聯(lián)鍵。使用UseSetting設(shè)置值時,該值設(shè)置為無論何種類型的字符串。

3.1應(yīng)用程序鍵(名稱)

在主機構(gòu)造期間調(diào)用UseStartup或Configure時,會自動設(shè)置 IHostingEnvironment.ApplicationName屬性。該值設(shè)置為包含應(yīng)用入口點的程序集的名稱。要顯式設(shè)置值,請使用WebHostDefaults.ApplicationKey(環(huán)境變量:ASPNETCORE_APPLICATIONNAME):

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    //應(yīng)用程序默認名稱為:CoreWeb (也就是項目名稱)
  string an = env.ApplicationName;
  ...
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args).UseStartup<Startup>()
           .UseSetting(WebHostDefaults.ApplicationKey, "CoreWeb");

3.2捕獲啟動錯誤

此設(shè)置控制啟動錯誤的捕獲。當(dāng)false時,啟動期間出錯導(dǎo)致主機退出。當(dāng)true時,主機在啟動期間捕獲異常并嘗試啟動服務(wù)器(環(huán)境變量:ASPNETCORE_CAPTURESTARTUPERRORS)。

WebHost.CreateDefaultBuilder(args)
    .CaptureStartupErrors(true)

3.3內(nèi)容根

此設(shè)置確定ASP.NET Core開始搜索內(nèi)容文件,如MVC視圖等。內(nèi)容根也用作Web根設(shè)置的基路徑。如果路徑不存在,主機將無法啟動(環(huán)境變量:ASPNETCORE_CONTENTROOT)。

WebHost.CreateDefaultBuilder(args)
    .UseContentRoot("c:\\<content-root>")

3.4詳細錯誤

確定是否應(yīng)捕獲詳細錯誤。啟用(或當(dāng)環(huán)境設(shè)置為Development)時,應(yīng)用捕獲詳細的異常(環(huán)境變量:ASPNETCORE_DETAILEDERRORS)。

WebHost.CreateDefaultBuilder(args)
    .UseSetting(WebHostDefaults.DetailedErrorsKey, "true")

3.5環(huán)境

設(shè)置應(yīng)用程序的環(huán)境。環(huán)境可以設(shè)置為任何值。框架定義的值包括Development、Staging和Production。值不區(qū)分大小寫。默認情況下,從ASPNETCORE_ENVIRONMENT環(huán)境變量讀取環(huán)境。使用Visual Studio時,可能會在launchSettings.json文件中設(shè)置環(huán)境變量。有關(guān)于環(huán)境詳情信息,可以移步到Core系列第10章節(jié)有參閱(環(huán)境變量:ASPNETCORE_ENVIRONMENT)。

WebHost.CreateDefaultBuilder(args)
    .UseEnvironment(EnvironmentName.Development)

3.6HTTPS端口

設(shè)置HTTPS重定向端口。用于強制實施HTTPS(環(huán)境變量:ASPNETCORE_HTTPS_PORT)。

WebHost.CreateDefaultBuilder(args)
    .UseSetting("https_port", "8080")

3.7服務(wù)器(Kestrel) URL

指示IP地址或主機地址,其中包含服務(wù)器應(yīng)針對請求偵聽的端口和協(xié)議。設(shè)置為服務(wù)器應(yīng)響應(yīng)的以分號分隔 (;) 的URL前綴列表。例如 http://localhost:123。使用“*”指示服務(wù)器應(yīng)針對請求偵聽的使用特定端口和協(xié)議(例如 http://*:5000)的IP地址或主機名。協(xié)議(http://或https://)必須包含每個URL。不同的服務(wù)器支持的格式有所不同(環(huán)境變量:ASPNETCORE_URLS)。

WebHost.CreateDefaultBuilder(args)
    .UseUrls("https://*:5000;https://localhost:5001;https://hostname:5002")

4.重寫配置

使用配置可以配置Web主機。在下面的示例中,主機配置是根據(jù)需要在hostsettings.json文件中指定。命令行參數(shù)可能會重寫從hostsettings.json文件加載的任何配置。生成的配置(在config中)用于通過UseConfiguration配置主機。
新建一個hostsettings.json文件,內(nèi)容如下:

{
  "urls": "https://*:5005"
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
    //IConfigurationBuilder的配置主機
    var config = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        //主機配置在hostsettings.json文件中指定
        .AddJsonFile("hostsettings.json", optional: true)
        //輸入的命令行參數(shù)可能會重寫從hostsettings.json文件加載的任何配置
        .AddCommandLine(args)
        .Build();

    return WebHost.CreateDefaultBuilder(args)
        .UseUrls("https://*:5001")
        .UseConfiguration(config)
        .Configure(app =>
        {
            //生成的配置委托函數(shù)
            app.Run(context =>
                context.Response.WriteAsync("Hello, World!"));
        });
}

上述代碼描述意思是若要指定在特定的URL上運行的主機,所需的值可以在執(zhí)行dotnet運行時從命令提示符傳入。命令行參數(shù)重寫hostsettings.json文件中的urls值,且服務(wù)器偵聽端口8080:

dotnet run --urls "http://*:8080"

主機啟動時,先用hostsettings.json config重寫UseUrls提供的urls參數(shù)配置,然后再用命令行參數(shù)config重寫hostsettings.json config的urls參數(shù)配置。

5.管理主機

管理主機啟動方式有Run和Start兩種。Run方法啟動Web應(yīng)用程序并阻止調(diào)用線程,直到關(guān)閉主機。Start方法通過調(diào)用自身以非阻止方式運行主機。

//Run
CreateWebHostBuilder(args).Build().Run();
//Start:非阻止方式,所有必須加上ReadLine
CreateWebHostBuilder(args).Build().Start();
Console.ReadLine();

6.IHostingEnvironment接口

IHostingEnvironment接口提供有關(guān)應(yīng)用的Web承載環(huán)境的信息。使用構(gòu)造函數(shù)注入獲取 IHostingEnvironment以使用其屬性和擴展方法:

//示例1:
public class CustomFileReader
{
    private readonly IHostingEnvironment _env;

    public CustomFileReader(IHostingEnvironment env)
    {
        _env = env;
    }
    public string ReadFile(string filePath)
    {
        var fileProvider = _env.WebRootFileProvider;
        // Process the file here
    }
}

可以用于在啟動時基于環(huán)境配置應(yīng)用程序或者將IHostingEnvironment注入到Startup構(gòu)造函數(shù),用于ConfigureServices:

//示例2:
public class Startup
{
    public Startup(IHostingEnvironment env)
    {
        HostingEnvironment = env;
    }
    public IHostingEnvironment HostingEnvironment { get; }
    public void ConfigureServices(IServiceCollection services)
    {
        if (HostingEnvironment.IsDevelopment())
        {
            // Development configuration
        }
        else
        {
            // Staging/Production configuration
        }
        var contentRootPath = HostingEnvironment.ContentRootPath;
    }
}

IHostingEnvironment服務(wù)還可以直接注入到Configure方法以設(shè)置處理管道:

//示例3:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        // In Development, use the Developer Exception Page
        app.UseDeveloperExceptionPage();
    }
    else
    {
        // In Staging/Production, route exceptions to /error
        app.UseExceptionHandler("/error");
    }
    var contentRootPath = env.ContentRootPath;
}

創(chuàng)建自定義中間件(要了解中間件的同學(xué)們,可以移步到第四章節(jié)學(xué)習(xí))時可以將IHostingEnvironment 注入Invoke方法:

public async Task Invoke(HttpContext context, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        // Configure middleware for Development
    }
    else
    {
        // Configure middleware for Staging/Production
    }
    var contentRootPath = env.ContentRootPath;
}

7.IApplicationLifetime接口

IApplicationLifetime允許后啟動和關(guān)閉活動。接口上的三個屬性是用于注冊Action方法(用于定義啟動和關(guān)閉事件)的取消標記。

取消標記

觸發(fā)條件

ApplicationStarted

主機已完全啟動。

ApplicationStopped

主機正在完成正常關(guān)閉。應(yīng)處理所有請求。 關(guān)閉受到阻止,直到完成此事件。

ApplicationStopping

主機正在執(zhí)行正常關(guān)閉。仍在處理請求。關(guān)閉受到阻止,直到完成此事件。

public class Startup
{
    public void Configure(IApplicationBuilder app, IApplicationLifetime appLifetime)
    {
        appLifetime.ApplicationStarted.Register(OnStarted);
        appLifetime.ApplicationStopping.Register(OnStopping);
        appLifetime.ApplicationStopped.Register(OnStopped);
        Console.CancelKeyPress += (sender, eventArgs) =>
        {
            appLifetime.StopApplication();
            // Don't terminate the process immediately, wait for the Main thread to exit gracefully.
            eventArgs.Cancel = true;
        };
    }
    private void OnStarted()
    {
        // Perform post-startup activities here
    }
    private void OnStopping()
    {
        // Perform on-stopping activities here
    }
    private void OnStopped()
    {
        // Perform post-stopped activities here
    }
}

StopApplication是請求應(yīng)用終止的意思。以下類在調(diào)用類的Shutdown方法時使用StopApplication正常關(guān)閉應(yīng)用:

public class MyClass
{
    private readonly IApplicationLifetime _appLifetime;
    public MyClass(IApplicationLifetime appLifetime)
    {
        _appLifetime = appLifetime;
    }
    public void Shutdown()
    {
        _appLifetime.StopApplication();
    }
}

8.作用域驗證

如果應(yīng)用環(huán)境為“開發(fā)(Development)”,則CreateDefaultBuilder將ServiceProviderOptions.ValidateScopes設(shè)為true。若將ValidateScopes設(shè)為true,默認服務(wù)提供應(yīng)用程序會執(zhí)行檢查來驗證以下內(nèi)容:
●作用域服務(wù)不能直接或間接地從根服務(wù)提供者解析。
●作用域服務(wù)不會直接或間接地注入到單例中(服務(wù)的生命周期)。
若要始終驗證作用域(包括在生命周期環(huán)境中驗證),請使用主機生成器上的 UseDefaultServiceProvider配置ServiceProviderOptions:

WebHost.CreateDefaultBuilder(args)
    .UseDefaultServiceProvider((context, options) => {
        options.ValidateScopes = true;
})

到此這篇關(guān)于ASP.NET Core配置和管理Web主機的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • ASP.NET Table 表格控件的使用方法

    ASP.NET Table 表格控件的使用方法

    使用 Table 控件可以在 ASP.NET 網(wǎng)頁上創(chuàng)建服務(wù)器可編程的表格。如果要創(chuàng)建的是靜態(tài)表格(運行時不會在其中添加或更改內(nèi)容的表格),則應(yīng)使用 HTML 表格,而不是 Table 控件。
    2016-04-04
  • 讀取TXT文件內(nèi)容的方法

    讀取TXT文件內(nèi)容的方法

    讀取TXT文件內(nèi)容的方法...
    2006-10-10
  • 頁面包含的處理

    頁面包含的處理

    頁面包含的處理...
    2006-08-08
  • .Net行為型設(shè)計模式之職責(zé)鏈模式(Chain of Responsibility)

    .Net行為型設(shè)計模式之職責(zé)鏈模式(Chain of Responsibility)

    這篇文章介紹了.Net行為型設(shè)計模式之職責(zé)鏈模式(Chain of Responsibility),文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • ASP.NET?MVC框架簡介

    ASP.NET?MVC框架簡介

    這篇文章介紹了ASP.NET?MVC框架,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • ASP.NET與數(shù)據(jù)庫相關(guān)技巧

    ASP.NET與數(shù)據(jù)庫相關(guān)技巧

    [紅色]ASP.NET與數(shù)據(jù)庫相關(guān)技巧...
    2006-10-10
  • .NET Framework 4.5新特性介紹

    .NET Framework 4.5新特性介紹

    .NET Framework 4.5新特性介紹,想要使用新版本的朋友可以參考下
    2012-04-04
  • asp.net FindControl方法誤區(qū)和解析

    asp.net FindControl方法誤區(qū)和解析

    在ASP.NET中Control都有一個FindControl方法,其作用是根據(jù)ID(注意既不是UniqueID也不是ClientID)在Control所在的命名容器中尋找相應(yīng)控件,但實際使用中存在很多誤區(qū)和陷阱,下面談?wù)剛€人對此的理解
    2012-01-01
  • WPF使用ValidationRules對MVVM架構(gòu)數(shù)據(jù)驗證

    WPF使用ValidationRules對MVVM架構(gòu)數(shù)據(jù)驗證

    這篇文章介紹了WPF使用ValidationRules對MVVM架構(gòu)數(shù)據(jù)驗證的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • ASP.NET Core讀取配置文件

    ASP.NET Core讀取配置文件

    這篇文章介紹了ASP.NET Core讀取配置文件的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02

最新評論