第20天:ASP.NET Core 與基礎設定
課程簡介
今天,我們將深入探討 ASP.NET Core,並學習如何進行其基礎設定。ASP.NET Core 是一個跨平台、開源的框架,用於建立現代化的 Web 應用程式。透過其模組化設計和強大的配置系統,開發者可以靈活地配置應用程式的環境和行為。
學習目標
- 了解 ASP.NET Core 的架構和特性
- 學習如何設定 ASP.NET Core 專案
- 掌握環境變數和應用程式配置的使用
- 學習中間件的概念與使用方式
課程內容
1. ASP.NET Core 簡介
ASP.NET Core 是微軟提供的現代化 Web 框架,支援跨平台運行於 Windows、Linux 和 macOS。它具有以下特點:
- 輕量且模組化:可以根據需求引入所需的功能,並移除不需要的組件。
- 跨平台:支援不同作業系統的開發和部署。
- 高效能:相較於傳統的 ASP.NET,ASP.NET Core 具有更高的性能和效率。
2. 建立 ASP.NET Core 專案
讓我們開始創建一個 ASP.NET Core 專案,並學習如何配置其基本設定。
創建 ASP.NET Core 專案:
使用以下命令來創建一個新的 ASP.NET Core 專案:
1
2
dotnet new web -n MyAspNetCoreApp
cd MyAspNetCoreApp
這會創建一個新的 ASP.NET Core Web 應用程式,專案目錄將包含以下關鍵檔案:
- Program.cs:應用程式的入口點。
- appsettings.json:應用程式的配置檔案。
- Startup.cs(如果使用 ASP.NET Core 5 或更早版本):負責設定中間件管道和服務。
3. Program.cs 與應用程式啟動
在 ASP.NET Core 中,應用程式的啟動點在 Program.cs
檔案。這個檔案定義了應用程式的主要邏輯,包括 Web 伺服器的設置和啟動。
Program.cs 基本範例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.MapGet("/", () => "Hello World!");
app.Run();
此範例中,CreateBuilder
方法會初始化應用程式的各項服務,並在 app.Build()
之後建立應用程式物件。app.UseRouting()
用來設置應用程式的路由,而 app.MapGet()
則設定了根路由返回 “Hello World!”。
4. 基礎中間件設定
中間件(Middleware) 是 ASP.NET Core 的一個核心概念,用於處理 HTTP 請求與回應。每個 ASP.NET Core 應用程式都是一系列中間件的組合。中間件按順序執行,決定了應用程式如何處理每個 HTTP 請求。
常見中間件設定:
- app.UseRouting():啟用路由功能。
- app.UseAuthentication():啟用身份驗證。
- app.UseAuthorization():啟用授權檢查。
- app.UseStaticFiles():提供靜態檔案的支援,如 CSS、JS 檔案。
- app.UseEndpoints():定義應用程式的端點。
中間件範例:
1
2
3
4
5
6
7
app.Use(async (context, next) =>
{
// 實作自定義中間件邏輯
Console.WriteLine("處理請求:" + context.Request.Path);
await next.Invoke(); // 呼叫下個中間件
Console.WriteLine("處理回應");
});
5. appsettings.json 與環境變數
ASP.NET Core 使用 appsettings.json 檔案來儲存應用程式的設定值,這些設定可以包括資料庫連接字串、外部服務 API 金鑰、日誌設定等。此檔案可以與環境變數結合使用,根據不同環境進行配置。
appsettings.json 基本結構:
1
2
3
4
5
6
7
8
9
10
11
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning"
}
},
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=mydb;Trusted_Connection=True;"
}
}
環境變數的使用:
ASP.NET Core 支援透過環境變數來覆蓋 appsettings.json
中的設定。例如,可以使用 ASPNETCORE_ENVIRONMENT
來指定應用程式的運行環境(如 Development
、Staging
、Production
)。
在 Program.cs
中,我們可以根據環境變數來執行不同的邏輯:
1
2
3
4
5
6
7
8
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage(); // 開發環境啟用詳細錯誤頁面
}
else
{
app.UseExceptionHandler("/Error"); // 生產環境啟用全域錯誤處理頁面
}
6. DI(依賴注入)與服務設定
依賴注入(Dependency Injection, DI) 是 ASP.NET Core 的內建功能,用來在應用程式中管理服務的建立與生命周期。我們可以在 Program.cs
中註冊並配置各種服務。
服務註冊範例:
1
builder.Services.AddTransient<IMyService, MyService>(); // 註冊服務
- AddTransient:每次請求都會建立一個新的服務實例。
- AddScoped:每個 HTTP 請求建立一個實例,請求結束後即銷毀。
- AddSingleton:應用程式期間只建立一個實例,且在所有請求間共享。
7. 日誌系統(Logging)
ASP.NET Core 提供了強大的內建日誌系統,用來記錄應用程式的各種事件。日誌系統可以透過 ILogger
介面進行使用,並可以配置不同的日誌輸出目標,如檔案、控制台或第三方服務。
日誌範例:
1
2
3
4
using Microsoft.Extensions.Logging;
var logger = app.Services.GetRequiredService<ILogger<Program>>();
logger.LogInformation("應用程式啟動中");
配置日誌級別:
在 appsettings.json
中可以設定日誌的級別:
1
2
3
4
5
6
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning"
}
}
8. 進階設定:開發與生產環境配置
在開發環境與生產環境中,應用程式的行為往往需要有所不同。ASP.NET Core 提供了對不同環境的支援,可以根據環境變數來調整應用程式的配置。
使用多個 appsettings 檔案:
- appsettings.Development.json:開發環境使用的配置。
- appsettings.Production.json:生產環境使用的配置。
當 ASP.NET Core 應用程式啟動時,會自動載入相應環境的設定檔,並覆蓋 appsettings.json
中的配置。
實作練習
- 自定義中間件
- 創建一個自定義中間件,用來記錄所有 HTTP 請求的 URL 和時間戳,並將此資訊輸出到日誌中。
- 配置多個環境
- 在
appsettings.Development.json
和appsettings.Production.json
中設定不同的資料庫連接字串,並根據ASPNETCORE_ENVIRONMENT
設置選擇合適的連接字串。
- 在
教學重點
- 了解 ASP.NET Core 的架構與其模組化設計。
- 掌握 Program.cs 的啟動流程與中間件的使用。
- 熟悉 appsettings.json 和環境變數的配置。
- 使用 DI 來管理服務與應用程式的依賴。
- 配置不同環境
下的應用程式行為。
在接下來的課程中,我們將學習 進階 ASP.NET Core 特性,如身份驗證、授權和資料保護等。