news 2026/9/14 6:54:48

CleanArchitecture 如何使用 Web-webapi.http 文件获取 Bearer Token 并调用 API 端点

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CleanArchitecture 如何使用 Web-webapi.http 文件获取 Bearer Token 并调用 API 端点

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/AppHost

Aspire dashboard 会自动打开,展示应用 URL 和日志。

有两个直接影响本流程的行为:

  1. Web 项目的https启动配置监听https://localhost:5001;http://localhost:5000(launchSettings.json),.http文件里的@Web_HostAddress = https://localhost:5001与这个地址一致。
  2. 开发环境下每次启动都会先删除并重建数据库,再写入种子数据(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/1DELETE /api/TodoLists/1POST /api/TodoItemsPUT /api/TodoItems/1PUT /api/TodoItems/UpdateItemDetails?Id=1DELETE /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.cssrc/Web/Endpoints/TodoItems.cssrc/Web/Endpoints/WeatherForecasts.cs,请求失败时可以按文件定位实现。

验证调用结果

  1. 令牌生效@BearerToken替换后发送GET /api/TodoLists,以 VS Code 响应面板中的状态码和响应体判断请求是否通过认证并返回数据。
  2. 种子数据锚点:由于启动时会重建数据库并写入种子,首次启动后发送GET /api/TodoLists,响应中应能看到种子创建的Tasks列表(含Make a todo list 📃等 4 条条目)。
  3. 写入验证:发送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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 6:54:31

西门子HMI国产替代:协议级兼容与边缘智能实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 6:51:19

基于改进YOLOv8的驾驶员分神行为检测系统设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 6:50:19

GEO优化技术:AI搜索时代的营销新策略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 6:48:59

GWO优化SVR模型:工业预测中的超参数调优实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 6:48:34

AI PPT工具评测与选型指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华