文章

第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 來指定應用程式的運行環境(如 DevelopmentStagingProduction)。

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 中的配置。


實作練習

  1. 自定義中間件
    • 創建一個自定義中間件,用來記錄所有 HTTP 請求的 URL 和時間戳,並將此資訊輸出到日誌中。
  2. 配置多個環境
    • appsettings.Development.jsonappsettings.Production.json 中設定不同的資料庫連接字串,並根據 ASPNETCORE_ENVIRONMENT 設置選擇合適的連接字串。

教學重點

  • 了解 ASP.NET Core 的架構與其模組化設計。
  • 掌握 Program.cs 的啟動流程與中間件的使用。
  • 熟悉 appsettings.json 和環境變數的配置。
  • 使用 DI 來管理服務與應用程式的依賴。
  • 配置不同環境

下的應用程式行為。

在接下來的課程中,我們將學習 進階 ASP.NET Core 特性,如身份驗證、授權和資料保護等。

本文章以 CC BY 4.0 授權