ASP.NET Core 學習筆記

一、LINQ 與 EF Core

LINQ 是什麼?

Language Integrated Query(語言整合查詢)

LINQ 與 SQL Injection

LINQ 本身不是資料庫查詢,但用 EF Core 就安全

Entity Framework Core (EF Core)

.NET 的 ORM(Object-Relational Mapper)

功能:

核心概念:

範例:

// 定義資料模型
public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
}

// 定義 DbContext
public class AppDbContext : DbContext
{
    public DbSet<User> Users { get; set; }
}

// 使用 LINQ 查詢資料
using (var db = new AppDbContext())
{
    var user = db.Users
                 .Where(u => u.Name == "Alice")
                 .FirstOrDefault(); // 會自動生成 SQL
}
    

二、ASP.NET 發展歷程

ASP (Classic ASP)

ASP.NET (.NET Framework 2.0 ~ 4.8.1)

ASP.NET Core (2016 起)

版本判斷速查表

名稱 代表什麼
ASP (Classic) 1996 年的老 ASP,副檔名 .asp
ASP.NET (.NET Framework 2.0 ~ 4.8.1) 舊世代,只能 Windows + IIS
ASP.NET Core (.NET Core 1.0 ~ 3.1) 新架構,跨平台,高效能
ASP.NET Core on .NET 5+ (.NET 5, 6, 7, 8...) 現在主流,名字只叫「.NET」,但本質上就是 ASP.NET Core

判斷關鍵:只要看到 .NET 5、.NET 6、.NET 7、.NET 8,就一定是 Core 架構

三、跨平台與 Web Server

跨平台 (Cross-Platform) 定義

IIS 的限制

Kestrel 的跨平台特性

ASP.NET Core 內建的跨平台 Web Server

在 Visual Studio 建立的 Web API 專案中,dotnet run 或 F5 啟動時,專案就會用 Kestrel 來監聽指定的端口。

四、RESTful API 設計

REST 是什麼?

Representational State Transfer

Roy Fielding 博士在 2000 年提出的 Web API 設計風格,不是標準或協定。

核心概念:

RESTful API 的設計原則

(1) 資源導向(Resource-Oriented)

(2) 使用 HTTP 方法表示動作

(3) 無狀態(Stateless)

(4) 統一介面(Uniform Interface)

完美的 RESTful API 條件

{ "error": "UserNotFound", "message": "User with ID 123 not found" }
    

五、專案設定與屬性

appsettings.json

共用的值存放處

專案設定

[ApiController] 屬性