跳至主要內容

FastAPI ↔ ASP.NET Core 對照速查 ​

如果你寫過 FastAPI,會發現 ASP.NET Core Minimal API 的很多想法是相通的:用函式定義端點、用型別宣告參數、自動產生 OpenAPI 文件。這張表幫你把已有的知識"翻譯"過來。

注意

對照只是幫助理解的類比,並不代表兩者行為完全一致。表中標註了差異較大的地方,詳細內容請閱讀對應章節。

專案與工具 ​

FastAPI / PythonASP.NET Core / .NET說明章節
python + pip + venvdotnet 命令列一個工具覆蓋執行、相依套件管理和建置,無需虛擬環境環境準備
pyproject.toml.csproj 專案檔案宣告目標框架與相依套件環境準備
PyPINuGet套件儲存庫環境準備
pip install xxxdotnet add package Xxx新增相依套件第一步
uvicornKestrelWeb 伺服器;Kestrel 內建在程式中,無需單獨啟動第一步
fastapi dev / uvicorn --reloaddotnet watch開發時自動重新載入;支援熱套用的改動無需重新啟動處理序開發工具附錄

定義端點 ​

FastAPI / PythonASP.NET Core / .NET說明章節
app = FastAPI()builder + app = builder.Build().NET 分為"註冊服務"和"處理請求"兩個階段第一步
@app.get("/")app.MapGet("/", ...)呼叫方法註冊端點,而不是用裝飾器第一步
回傳 dict回傳匿名型別 new { ... } 或 record自動序列化為 JSON,屬性名轉為 camelCase第一步
/docs/scalar(Scalar.AspNetCore)互動式文件;.NET 中產生與展示分屬兩個套件第一步
/openapi.json/openapi/v1.jsonOpenAPI 文件,.NET 10 預設產生 OpenAPI 3.1第一步

請求參數 ​

FastAPI / PythonASP.NET Core / .NET說明章節
/items/{item_id} + item_id: int/items/{id:int} + int id同名繫結、型別轉換路由參數
按宣告順序匹配路由按優先順序匹配路由差異:.NET 中註冊順序不影響匹配結果路由參數
{file_path:path}{*path}匹配包含 / 的剩餘路徑路由參數
查詢參數 q: str | None = Nonestring? q可空型別表示可選參數查詢參數
Pydantic 模型作為請求本文record 作為請求本文JSON 自動繫結到強型別物件請求本文
Field(ge=1) 等驗證資料註解 + .NET 10 內建驗證參數驗證
Header() / Cookie()[FromHeader] / HttpRequest.Cookies.NET 沒有 [FromCookie] 特性,Cookie 從請求物件讀取Header 與 Cookie

回應與錯誤 ​

FastAPI / PythonASP.NET Core / .NET說明章節
response_modelTypedResults 與 Results<T1, T2>型別化結果約束處理常式回傳值並提供文件中繼資料,不等同於 Pydantic 的執行階段回應驗證與過濾回應型別
HTTPExceptionTypedResults.NotFound()、ProblemDetails狀態碼與錯誤處理
APIRouterapp.MapGroup(...)路由群組、公共字首路由群組

應用程式骨架 ​

FastAPI / PythonASP.NET Core / .NET說明章節
Depends()相依性注入容器 builder.Services.NET 內建完整的 DI 容器,有三種生命週期相依性注入
pydantic-settings設定系統 + Options 模式appsettings.json、環境變數、User Secrets設定與 Options
@app.middleware("http")app.Use(...) 中介軟體管道模型,順序很重要中介軟體
loggingILogger<T>結構化記錄記錄

資料、安全與上線 ​

FastAPI / PythonASP.NET Core / .NET說明章節
SQLAlchemy / SQLModelEF CoreORM;DbContext 跟蹤並儲存實體變化EF Core 入門
relationship / 查詢表示式導航屬性、LINQ、Include區分關聯宣告、投影和關聯物件載入關聯與查詢
Session 中修改實體並提交跟蹤實體 + SaveChangesAsync()輸入 DTO 與資料庫實體分開完整 CRUD
AlembicEF Core 遷移(dotnet ef)用於結構升級;第 23 章使用遷移管理升級資料庫遷移
OAuth2PasswordBearer + JWT 驗證邏輯AddJwtBearer + RequireAuthorization()FastAPI 的認證資訊提取不等於 JWT 驗證;本地權杖用 dotnet user-jwts 產生身分驗證(JWT)
Security() / 依賴中檢查權限命名策略 + RequireAuthorization()本例按 editor 角色限制寫入授權
CORSMiddlewareAddCors + UseCors瀏覽器跨源許可,不代替身分驗證授權CORS
TestClientWebApplicationFactory在記憶體中啟動應用程式做整合測試測試

熟悉 SQL 的話,也可以檢視 EF Core / LINQ ↔ PostgreSQL 速查,對照查詢、分頁、關聯和增刪改。

採用 .NET 10 與 Minimal API · 所有範例皆可直接 dotnet run