亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2022-04-07 15:51:17 來源:億速云 閱讀:191 作者:iii 欄目:開發技術

本篇內容主要講解“ASP.NET Core怎么配置和管理Web主機”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“ASP.NET Core怎么配置和管理Web主機”吧!

    1.前言

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

    2.設置主機

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

    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執行下列任務

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

    2.2重寫和增強定義的配置

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

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

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

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

    ConfigureKestrel:調用ConfigureKestrel來重寫CreateDefaultBuilder在配置Kestrel時建立的30,000,000字節默認Limits.MaxRequestBodySize:

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

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

    3.主機配置值

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

    3.1應用程序鍵(名稱)

    在主機構造期間調用UseStartup或Configure時,會自動設置 IHostingEnvironment.ApplicationName屬性。該值設置為包含應用入口點的程序集的名稱。要顯式設置值,請使用WebHostDefaults.ApplicationKey(環境變量:ASPNETCORE_APPLICATIONNAME):

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

    3.2捕獲啟動錯誤

    此設置控制啟動錯誤的捕獲。當false時,啟動期間出錯導致主機退出。當true時,主機在啟動期間捕獲異常并嘗試啟動服務器(環境變量:ASPNETCORE_CAPTURESTARTUPERRORS)。

    WebHost.CreateDefaultBuilder(args)
        .CaptureStartupErrors(true)

    3.3內容根

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

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

    3.4詳細錯誤

    確定是否應捕獲詳細錯誤。啟用(或當環境設置為Development)時,應用捕獲詳細的異常(環境變量:ASPNETCORE_DETAILEDERRORS)。

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

    3.5環境

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

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

    3.6HTTPS端口

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

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

    3.7服務器(Kestrel) URL

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

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

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

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

    4.重寫配置

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

    {
      "urls": "https://*:5005"
    }
    public static IWebHostBuilder CreateWebHostBuilder(string[] args)
    {
        //IConfigurationBuilder的配置主機
        var config = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            //主機配置在hostsettings.json文件中指定
            .AddJsonFile("hostsettings.json", optional: true)
            //輸入的命令行參數可能會重寫從hostsettings.json文件加載的任何配置
            .AddCommandLine(args)
            .Build();
    
        return WebHost.CreateDefaultBuilder(args)
            .UseUrls("https://*:5001")
            .UseConfiguration(config)
            .Configure(app =>
            {
                //生成的配置委托函數
                app.Run(context =>
                    context.Response.WriteAsync("Hello, World!"));
            });
    }

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

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

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

    5.管理主機

    管理主機啟動方式有Run和Start兩種。Run方法啟動Web應用程序并阻止調用線程,直到關閉主機。Start方法通過調用自身以非阻止方式運行主機。

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

    6.IHostingEnvironment接口

    IHostingEnvironment接口提供有關應用的Web承載環境的信息。使用構造函數注入獲取 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
        }
    }

    可以用于在啟動時基于環境配置應用程序或者將IHostingEnvironment注入到Startup構造函數,用于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服務還可以直接注入到Configure方法以設置處理管道:

    //示例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;
    }

    創建自定義中間件(要了解中間件的同學們,可以移步到第四章節學習)時可以將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允許后啟動和關閉活動。接口上的三個屬性是用于注冊Action方法(用于定義啟動和關閉事件)的取消標記。

    取消標記

    觸發條件

    ApplicationStarted

    主機已完全啟動。

    ApplicationStopped

    主機正在完成正常關閉。應處理所有請求。 關閉受到阻止,直到完成此事件。

    ApplicationStopping

    主機正在執行正常關閉。仍在處理請求。關閉受到阻止,直到完成此事件。

    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是請求應用終止的意思。以下類在調用類的Shutdown方法時使用StopApplication正常關閉應用:

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

    8.作用域驗證

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

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

    到此,相信大家對“ASP.NET Core怎么配置和管理Web主機”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    姚安县| 屏南县| 峨边| 澜沧| 扎赉特旗| 五莲县| 临颍县| 宣恩县| 札达县| 新龙县| 鲁甸县| 东兰县| 文登市| 天长市| 景东| 通江县| 宁波市| 孝义市| 蓬溪县| 平阳县| 呼图壁县| 大新县| 定襄县| 彰化市| 云阳县| 平阳县| 福海县| 金坛市| 蓬莱市| 横山县| 彰化市| 榆林市| 江达县| 山阴县| 河北区| 凌海市| 连城县| 安庆市| 黔西| 洛宁县| 偃师市|