跳到正文

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