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,可協助您從應用程式收集和分析診斷資料。