CleanArchitecture 如何使用 Web-webapi.http 文件获取 Bearer Token 并调用 API 端点
【免费下载链接】CleanArchitectureClean Architecture Solution Template for ASP.NET Core项目地址: https://gitcode.com/GitHub_Trending/cle/CleanArchitecture
你已经在 CleanArchitecture 模板下生成了 API-only 解决方案,想在浏览器之外直接完成"登录 → 拿 Bearer Token → 带 Token 调用 TodoLists / TodoItems / WeatherForecasts 等受保护端点"的操作。模板仓库的src/Web/Web-webapi.http就是为这个流程准备的:它是 VS Code 原生支持的.http请求文件(文件头注释指向aka.ms/vs/httpfile),已经写好注册、登录、刷新令牌以及全部数据端点的请求,通过@BearerToken变量自动注入Authorization头。
按 README 的说明,本流程的环境前提是:
- .NET 10.0 SDK 或更高版本;
- 解决方案以
--client-framework none(API-only)方式生成。只有该模式下 Web 项目启用 Bearer Token 认证(见src/Infrastructure/DependencyInjection.cs中#if (UseApiOnly)分支注册的IdentityConstants.BearerScheme);生成 Angular/React 前端时走的是 Cookie 认证,对应文件是src/Web/Web.http; - 数据库用默认的 SQLite 时不需要 Docker,也不需要 Node.js(Node.js 仅在前端模式下需要)。
准备:生成并运行解决方案
按 README 的命令安装模板并创建 API-only 解决方案:
dotnet new install Clean.Architecture.Solution.Template dotnet new ca-sln -cf none -db sqlite -o YourProjectName启动应用(README 中的原命令为dotnet run --project .\src\AppHost,Linux/macOS 上写src/AppHost即可):
dotnet run --project src/AppHostAspire dashboard 会自动打开,展示应用 URL 和日志。
有两个直接影响本流程的行为:
- Web 项目的
https启动配置监听https://localhost:5001;http://localhost:5000(launchSettings.json),.http文件里的@Web_HostAddress = https://localhost:5001与这个地址一致。 - 开发环境下每次启动都会先删除并重建数据库,再写入种子数据(Program.cs 仅在
IsDevelopment()时调用InitialiseDatabaseAsync())。
种子数据由 ApplicationDbContextInitialiser.cs 的TrySeedAsync写入,包含:
- 管理员用户
administrator@localhost,密码Administrator1!—— 正是.http文件中@Email/@Password的默认值; - 一条标题为
Tasks的 TodoList(含 4 条 TodoItem),文件中PUT/DELETE /api/TodoLists/1这类按 Id 操作的就是这条种子列表。
理解 Web-webapi.http 的变量
文件开头定义了一组变量,请求体中用{{变量名}}引用:
@Web_HostAddress = https://localhost:5001 @Email=administrator@localhost @Password=Administrator1! @BearerToken=<YourToken>@Web_HostAddress:API 基地址,对应 launchSettings 的 https 端口;换端口或主机时只改这一处。@Email/@Password:登录凭证,默认即种子管理员;要测试自己的账号就改成对应值。@BearerToken:唯一需要你手动填写的占位符,<YourToken>要替换成 Login 响应中返回的访问令牌(见下文 3.2)。GET TodoItems请求块内还定义了@PageNumber = 1和@PageSize = 10两个分页参数。
操作步骤:发送请求并设置 Token
在 VS Code 中打开src/Web/Web-webapi.http,把光标放到某个请求块内,点击请求上方的 Send Request 发送,响应会直接显示在编辑器中。
3.1 注册用户(可选)
种子已含管理员账号,可直接跳过。要注册新账号时,先把@Email/@Password改成新账号的值,再发送:
POST {{Web_HostAddress}}/api/Users/Register Content-Type: application/json { "email": "{{Email}}", "password": "{{Password}}" }3.2 登录获取 Bearer Token(必做)
POST {{Web_HostAddress}}/api/Users/Login Content-Type: application/json { "email": "{{Email}}", "password": "{{Password}}" }登录成功后,从响应中取出访问令牌,改写文件顶部的变量行:
@BearerToken=<此处粘贴 Login 返回的访问令牌>之后所有带Authorization: Bearer {{BearerToken}}的请求都会自动携带该令牌。替换前这个头里字面上是字符串<YourToken>,不是有效令牌,受保护端点不会放行。
3.3 刷新令牌(可选)
POST {{Web_HostAddress}}/api/Users/Refresh Authorization: Bearer {{BearerToken}} Content-Type: application/json { "refreshToken": "" }模板中请求体的refreshToken是空字符串占位,需要按实际情况填入后才能实际刷新会话。
3.4 带 Token 调用数据端点
文件提供了全套数据端点请求,统一携带Authorization: Bearer {{BearerToken}}头。最简查询:
# GET WeatherForecast GET {{Web_HostAddress}}/api/WeatherForecasts Authorization: Bearer {{BearerToken}}创建和查询 TodoList:
# POST TodoLists POST {{Web_HostAddress}}/api/TodoLists Authorization: Bearer {{BearerToken}} Content-Type: application/json // CreateTodoListCommand { "Title": "Backlog" }# GET TodoLists GET {{Web_HostAddress}}/api/TodoLists Authorization: Bearer {{BearerToken}}其余端点(PUT /api/TodoLists/1、DELETE /api/TodoLists/1、POST /api/TodoItems、PUT /api/TodoItems/1、PUT /api/TodoItems/UpdateItemDetails?Id=1、DELETE /api/TodoItems/1)结构相同,直接在文件中发送即可。分页查询 TodoItems:
# GET TodoItems @PageNumber = 1 @PageSize = 10 GET {{Web_HostAddress}}/api/TodoItems?ListId=1&PageNumber={{PageNumber}}&PageSize={{PageSize}} Authorization: Bearer {{BearerToken}}/api/Users/*请求由 Users.cs 中的MapIdentityApi<ApplicationUser>()生成;数据端点的实现分别在src/Web/Endpoints/TodoLists.cs、src/Web/Endpoints/TodoItems.cs、src/Web/Endpoints/WeatherForecasts.cs,请求失败时可以按文件定位实现。
验证调用结果
- 令牌生效:
@BearerToken替换后发送GET /api/TodoLists,以 VS Code 响应面板中的状态码和响应体判断请求是否通过认证并返回数据。 - 种子数据锚点:由于启动时会重建数据库并写入种子,首次启动后发送
GET /api/TodoLists,响应中应能看到种子创建的Tasks列表(含Make a todo list 📃等 4 条条目)。 - 写入验证:发送
POST /api/TodoLists("Title": "Backlog")后再次查询,新列表应出现在响应中。
限制与边界
- 仅适用于
-cf none的 API-only 模式;SPA 模式使用 Cookie 认证,流程见 src/Web/Web.http(登录接口获取 Cookie 后以Cookie:头调用同一批端点)。 - 开发环境每次启动都会
EnsureDeleted后重建数据库,手动创建的列表/条目在重启后不保留,种子数据会重新写入。 - 所有请求默认指向本地开发地址
https://localhost:5001;API-only 模式下访问/会重定向到/scalar参考页(见 Program.cs),可作为端点文档的辅助入口。 - 换用 PostgreSQL 或 SQL Server 数据库时需要 Docker Desktop 或 Podman(README 前提条件),但认证与请求流程不变。
下一步可以阅读 docs/decisions/ 下的架构决策记录,了解 Identity、MediatR 等设计背景。
【免费下载链接】CleanArchitectureClean Architecture Solution Template for ASP.NET Core项目地址: https://gitcode.com/GitHub_Trending/cle/CleanArchitecture
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考