ASP.NET Core 的運作方式

已完成

ASP.NET Core 應用程式基本上是具有 Program.cs 檔案的 .NET 應用程式,可設定所需的 Web 應用程式元件功能,並讓它執行。

最基本 ASP.NET Core 應用程式的 Program.cs 檔案:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

使用先前的程式碼:

  • 已設定基本的 ASP.NET Core Web 應用程式,以接聽根 URL ("/") 的 HTTP GET 要求,並以 “Hello World!” 回應。
  • 應用程式會初始化、設定單一路由,並啟動網頁伺服器。

Blazor

您可以使用 Blazor,用 ASP.NET Core 建置互動式 Web UI。 Blazor 是與 ASP.NET Core 整合的元件型 Web UI 架構,用於使用 HTML、CSS 和 C# 建置互動式 Web UI。

可重複使用的 Blazor 元件,例如下列 Counter 元件定義於 Counter.razor 檔案中:

@page "/counter"
@rendermode InteractiveServer

<PageTitle>Counter</PageTitle>

<h1>Counter</h1>

<p role="status">Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
    private int currentCount = 0;

    private void IncrementCount()
    {
        currentCount++;
    }
}

使用先前的程式碼:

  • 系統會建立顯示計數器的元件。
  • @code 區塊包含使用 C# 的元件邏輯,包括遞增計數器的方法。
  • 每次按下按鈕時,就會顯示並更新計數器值。
  • 元件方法可讓您跨應用程式的不同部分重複使用程式碼,並彈性地在瀏覽器或 Blazor 應用程式中的伺服器上執行。

藉由新增 <Counter /> 元素,即可將 Counter 元件新增至應用程式中的任何網頁。

@page "/"

<PageTitle>Home</PageTitle>

<h1>Hello, world!</h1>

<Counter />

API

ASP.NET Core 提供使用 Azure SignalR Service 建置 API、gRPC 服務和即時應用程式的架構,以將資料更新立即推送至用戶端。

基本最小 API:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/hello", () => "Hello, World!");

app.Run();

使用先前的程式碼:

  • 設定最小的 API 以接聽 /hello URL 上的 HTTP GET 要求,並以 “Hello, World!” 回應。
  • WebApplicationBuilder 可用來設定應用程式。
  • MapGet 方法會定義 GET 要求的路由和處理常式。

中介軟體

ASP.NET Core 使用中介軟體元件的管線來處理 HTTP 要求和回應。 此模組化方法提供彈性,可讓您視需要新增或移除中介軟體元件,以自訂和擴充應用程式的功能。

中介軟體管線會循序處理 HTTP 要求,確保每個元件可以在將要求傳遞至管線中的下一個元件之前,先執行其指定的工作。

Program.cs 檔案中新增內建中介軟體:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.UseHttpsRedirection();

app.UseRouting();

app.MapStaticAssets();

app.UseAuthentication();

app.UseAuthorization();

app.MapGet("/", () => "Hello World!");

app.Run();

在先前的程式碼中,已新增數個常見的中介軟體元件:

  • UseHttpsRedirection:將 HTTP 要求重新導向至 HTTPS。
  • UseRouting:啟用路由以將要求對應至端點。
  • MapStaticAssets:將靜態檔案的傳遞最佳化,例如 HTML、CSS、JavaScript、影像和其他資產。
  • UseAuthentication:新增驗證功能。
  • UseAuthorization:新增驗證功能。
  • app.MapGet:這是一個簡單的端點,示範應用程式正在執行。

相依性插入

ASP.NET Core 包含內建的相依性插入 (DI) 支援,用於設定應用程式及其各種架構元件所使用的服務。

例如,您可能想要使用 EntityFramework Core 之類的架構,集中設定服務,而應用程式的其他部分則相依於存取資料庫。 您可以使用相依性插入,從 EntityFramework Core 將資料庫內容設定為服務,如下所示:

public class MyDbContext : DbContext
{
    public MyDbContext(DbContextOptions<MyDbContext> options) : base(options) { }
    
    public DbSet<Product> Products { get; set; } = default!;
}

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MyDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

var app = builder.Build();

app.Run();

使用先前的程式碼:

  • DbContext 會設定為使用相依性插入的服務。
  • WebApplicationBuilder 可用來設定應用程式。
  • AddDbContext 方法會向相依性插入容器註冊 DbContext
  • 連接字串會從組態擷取,並用來設定資料庫內容。

設定

ASP.NET Core 支援從各種來源存取組態資料,例如 JSON 檔案、環境變數和命令列引數。

appsetting.json 檔案中設定連接字串:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;"
  }
}

在 Program.cs 檔案中:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MyDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

var app = builder.Build();

app.Run();

使用先前的程式碼:

  • 連接字串是在 appsettings.json 檔案中設定的。
  • WebApplicationBuilder 可用來設定應用程式。
  • AddDbContext 方法會向相依性插入容器註冊 DbContext
  • 連接字串會從組態擷取,並用來設定資料庫內容。

監視和診斷

ASP.NET Core 提供一套完整的工具,來監視和維護應用程式的健康情況和效能。 這些功能可以輕鬆地新增至您的應用程式作為中介軟體元件,並將特定功能整合到您的專案中:

  • 內建計量:ASP.NET Core 包含內建計量,可追蹤應用程式效能的各個層面,例如要求率、回應時間和錯誤率。
  • 彈性記錄架構:內建彈性紀錄架構,並支援各種記錄提供者,包括主控台、偵錯和事件來源。 這有助於擷取診斷和監視的詳細記錄。
  • 追蹤:ASP.NET Core 支援分散式追蹤,可協助您追蹤不同服務和元件間的要求流程。 這適用於診斷效能問題,及了解應用程式不同部分之間的互動。
  • OpenTelemetry:ASP.NET Core 與 OpenTelemetry 整合,這是雲端原生軟體的開放原始碼可檢視性架構。 OpenTelemetry 提供標準化的 API 和檢測設備來收集計量、記錄和追蹤,讓您更有效率地監視和診斷應用程式。
  • 健康情況檢查:健康情況檢查 API 可讓您監視應用程式及其相依性的健康情況。 您可以設定健康情況檢查來報告各種元件的狀態,例如資料庫、外部服務等等。
  • 診斷工具:ASP.NET Core 提供各種診斷工具,例如 dotnet-trace、dotnet-dump 和 dotnet-gcdump,可協助您從應用程式收集和分析診斷資料。