ASP.NET Core基礎知識(一)【概述】

風靈使發表於2019-02-16

ASP.NET Core 應用是一個控制檯應用,它在其 Program.Main 方法中建立 Web 伺服器。 Main 方法是應用的託管入口點:

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

.NET Core 主機:

  • 載入 .NET Core 執行時。
  • 使用第一個命令列引數作為包含入口點 (Main) 的託管二進位制檔案的路徑,並開始執行程式碼。

Main 方法呼叫 WebHost.CreateDefaultBuilder,後者按照生成器模式來建立 Web 主機。 生成器包含定義 Web 伺服器(例如,UseKestrel)和啟動類 (UseStartup) 的方法。 在前面的例子中,自動分配了 Kestrel Web 伺服器。 ASP.NET CoreWeb 主機嘗試在 Internet Information Services (IIS)(若有)上執行。 對於其他 Web 伺服器(如 HTTP.sys),可通過呼叫相應的擴充套件方法來使用。 啟動部分進一步介紹了 UseStartup

IWebHostBuilderWebHost.CreateDefaultBuilder 呼叫的返回型別,它提供了許多可選方法。 其中的一些方法包括用於在 HTTP.sys 中託管應用的 UseHttpSys,以及用於指定根內容目錄的 UseContentRootBuildRun 方法生成 IWebHost 物件,該物件託管應用並開始偵聽 HTTP 請求。

啟動

WebHostBuilder 上的 UseStartup 方法為你的應用指定 Startup 類:

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

Startup 類用於在其中配置應用所需的任何服務和定義請求處理管道。 Startup 類必須是公共類,通常包含以下方法。Startup.ConfigureServices 是可選的。

public class Startup
{
    // This method gets called by the runtime. Use this method
    // to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
    }

    // This method gets called by the runtime. Use this method
    // to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app)
    {
    }
}

ConfigureServices 定義應用所使用的服務(如 ASP.NET Core MVC、Entity Framework Core 和標識)。 Configure 定義在請求管道中呼叫的中介軟體。

有關更多資訊,請參見ASP.NET Core 中的應用啟動

內容根

內容根是應用所使用的任何內容的基路徑,如 Razor PagesMVC 檢視和靜態資產。 預設情況下,內容根位置與用於託管應用的可執行檔案的應用基路徑相同。

Web 根 (webroot)

應用的 webroot 是專案中的目錄,其中包含公共資源、CSS 等靜態資源、JavaScript 和圖形檔案。 wwwroot 預設為 webroot

對於 Razor (.cshtml) 檔案,波浪號斜槓 ~/ 指向 webroot。 以 ~/ 開頭的路徑稱為虛擬路徑。

依賴關係注入(服務)

服務是應用中常用的元件。 可以通過依存關係注入 (DI) 來獲取服務。 ASP.NET Core 包括預設支援建構函式注入的本機控制反轉 (IoC) 容器。 可根據需要替換預設容器。 DI 除了具備鬆散耦合優勢以外,還可以使服務(例如日誌記錄)在整個應用中可用。

有關更多資訊,請參見在 ASP.NET Core 依賴注入

中介軟體

ASP.NET Core 中,使用中介軟體來撰寫請求管道。 ASP.NET Core 中介軟體在 HttpContext 上執行非同步操作,然後呼叫管道中的下一個中介軟體或終止請求。

按照慣例,通過在 Configure 方法中呼叫 UseXYZ 擴充套件方法,向管道新增名為“XYZ”的中介軟體元件。

ASP.NET Core 包含一組豐富的內建中介軟體,你也可以編寫自己的自定義中介軟體。 ASP.NET Core 應用中支援 .NET 的開放 Web 介面 (OWIN),它將 Web 應用與 Web 伺服器分離。

有關詳細資訊,請參閱 ASP.NET Core 中介軟體ASP.NET Core中 .NET 的開放 Web 介面 (OWIN)

啟動 HTTP 請求

IHttpClientFactory 可訪問 HttpClient 例項以發出 HTTP 請求。

有關更多資訊,請參見啟動 HTTP 請求

環境

環境(如“開發”環境和“生產”環境)是 ASP.NET Core 的高階概念,可使用環境變數、設定檔案和命令列引數進行設定。

有關更多資訊,請參見在 ASP.NET Core 中使用多個環境

宿主

ASP.NET Core 應用可配置和啟動一個主機,負責應用啟動和生存期管理。

有關更多資訊,請參見ASP.NET Core 中的 Web 主機和通用主機

伺服器

ASP.NET Core 託管模型不直接偵聽請求。 託管模型依賴 HTTP 伺服器實現將請求轉發到應用。

ASP.NET Core 提供以下伺服器實現:

  • Kestrel 伺服器是跨平臺託管 Web 伺服器。 Kestrel 通常使用 IIS 在反向代理配置中執行。 在 ASP.NET Core 2.0 或更高版本中,Kestrel 也可作為面向公眾的邊緣伺服器執行,直接向 Internet 公開。
  • IIS HTTP 伺服器 (IISHttpServer) 是 IIS 的程式內伺服器。
  • HTTP.sys 伺服器是 Windows 上適用於 ASP.NET CoreWeb 伺服器。

有關更多資訊,請參見ASP.NET Core 中的 Web 伺服器實現

配置

ASP.NET Core 基於名稱/值對使用配置模型。 配置模型不基於 System.Configurationweb.config。配置從一組有序的配置提供程式獲取設定。 內建配置提供程式支援各種檔案格式(XML、 JSON、INI)、環境變數和命令列引數。 也可以編寫你自己的自定義配置提供程式。

有關更多資訊,請參見ASP.NET Core 中的配置

日誌記錄

ASP.NET Core 支援適用於各種日誌記錄提供程式的日誌記錄 API。 內建提供程式支援向一個或多個目標傳送日誌。 可使用第三方記錄框架。

有關更多資訊,請參見ASP.NET Core 中的日誌記錄

錯誤處理

ASP.NET Core 的內建方案可處理應用中的錯誤,包括開發人員異常頁、自定義錯誤頁、靜態狀態內碼表和啟動異常處理。

有關更多資訊,請參見處理 ASP.NET Core 中的錯誤

路由

ASP.NET Core 提供將應用請求路由到路由處理程式的方案。

有關更多資訊,請參見ASP.NET Core 中的路由

後臺任務

後臺任務作為託管服務實現。 託管服務是一個類,具有實現 IHostedService 介面的後臺任務邏輯。

有關更多資訊,請參見在 ASP.NET Core 中使用託管服務實現後臺任務。

訪問 HttpContext

Razor PagesMVC 處理請求時,HttpContext 自動可用。當 HttpContext 不可立即使用時,可通過 IHttpContextAccessor 介面及其預設實現 HttpContextAccessor 訪問 HttpContext

相關文章