跳到主要内容
版本:3.0

Swagger 文档扩展(Aegis.Extensions.Swagger)

Aegis.Extensions.Swagger 用来给 Web API 提供 OpenAPI 文档、Swagger UI 调试入口和认证头说明。它不是单纯的服务注册组件,而是同时覆盖了服务注册和中间件接入,所以接入时要把 Swagger 同时放进 Services 和 Middlewares。

组件概览​

字段说明
组件名称Swagger 文档扩展
真实类库Aegis.Extensions.Swagger
组件定位OpenAPI 文档生成与 Swagger UI 入口
引入方式安装 NuGet,并在 Component.deps.json 中启用 Swagger
组件声明Swagger
配置节点Swagger
核心能力生成接口文档、挂载 Swagger UI、显示认证请求头、合并扩展 XML 注释

什么时候要用它​

适合场景:

  • 需要给前后端联调提供在线接口文档
  • 需要给测试或实施人员提供 Swagger UI 调试入口
  • 需要把接口 XML 注释同步展示到文档页里
  • 需要在 Swagger UI 里直接填写 Authorization 等安全头

最小可运行路径​

第一步:启用 Swagger​

这个组件既要注册 AddSwaggerGen(...),也要把 UseSwagger() 和 UseSwaggerUI() 放进请求管线,所以两处都要配置。

{
"Components": {
"Services": [
"Swagger"
],
"Middlewares": [
"Swagger"
]
}
}

第二步:准备 Swagger 配置​

{
"Swagger": {
"IsEnabled": true,
"Title": "Aegis Demo",
"Version": "v1",
"XmlCommentsPath": "{CurrentDirectory}/{CurrentProject}.xml",
"ExtensionXmlComments": [
"{CurrentDirectory}/*.Dto.xml"
],
"SecurityScheme": {
"SecurityEnabled": true,
"AddBearerHeader": true,
"BearerName": "Authorization",
"Description": "Value Bearer {token}"
}
}
}

第三步:确保项目生成 XML 注释文件​

如果没有 XML 注释文件,Swagger 页面可以挂出来,但注释说明和很多模型描述都会缺失;当 XmlCommentsPath 指向了不存在的文件时,应用启动还会直接报错。

<PropertyGroup>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>$(NoWarn);1591</NoWarn>
</PropertyGroup>

第四步:启动后访问 Swagger UI​

通常访问:

  • /swagger
  • /swagger/index.html

如果项目启用了虚拟目录或网关前缀,再按实际发布路径访问。

这组配置分别控制什么​

配置项作用
IsEnabled是否启用 Swagger
Title文档标题
VersionSwagger 文档版本号
XmlCommentsPath当前主项目 XML 注释文件路径
ExtensionXmlComments额外 XML 注释文件列表,常用于合并 DTO 或其他类库注释
SecurityScheme.SecurityEnabled是否启用安全头定义
SecurityScheme.AddBearerHeader是否按 Bearer 口径展示认证头
SecurityScheme.BearerName认证请求头名称,通常保持 Authorization
SecurityScheme.DescriptionSwagger UI 中显示的认证头说明

配置时最容易忽略的两个占位符​

{CurrentDirectory}​

表示当前程序运行目录。
最常见用途是把 XML 路径写成:

{
"Swagger": {
"XmlCommentsPath": "{CurrentDirectory}/{CurrentProject}.xml"
}
}

{CurrentProject}​

表示当前启动项目名称。
如果 XML 文件名和启动项目同名,这个占位符能避免每个项目都手动改一遍。

如何把 DTO、扩展类库的注释也带进 Swagger​

当接口返回类型、请求对象、枚举说明分散在多个类库时,只写主项目 XML 往往不够。
这时候可以把附加 XML 放进 ExtensionXmlComments。

{
"Swagger": {
"XmlCommentsPath": "{CurrentDirectory}/{CurrentProject}.xml",
"ExtensionXmlComments": [
"{CurrentDirectory}/*.Dto.xml",
"{CurrentDirectory}/Aegis.Transfer.xml"
]
}
}

如果你的 XML 文件命名有统一规律,可以直接使用通配符。

什么时候要开启安全头说明​

只要接口需要登录态、JWT、SSO 或其他令牌头,通常都建议打开 SecurityScheme。

{
"Swagger": {
"SecurityScheme": {
"SecurityEnabled": true,
"AddBearerHeader": true,
"BearerName": "Authorization",
"Description": "Value Bearer {token}"
}
}
}

启用后,Swagger UI 会出现认证按钮,方便联调时直接填写头信息。

推荐的接入顺序​

  1. 先完成控制器、认证、DTO 注释
  2. 再启用 Swagger
  3. 然后补主项目 XML 输出
  4. 最后再按需要合并 DTO 或共享类库 XML

这样排查问题时最简单,能先确认 Swagger 本身是否起来,再逐步补细节。

接入完成后怎么确认成功​

你至少应该确认这些点:

  • Component.deps.json 的 Services 和 Middlewares 都包含了 Swagger
  • Swagger:IsEnabled 为 true
  • XmlCommentsPath 指向的 XML 文件真实存在
  • /swagger/index.html 可以正常打开
  • 页面里能看到控制器、动作说明和模型字段注释
  • 如果启用了认证,页面右上角能看到认证按钮

常见问题​

为什么项目启动后没有 Swagger 页面​

优先检查:

  1. Services 是否包含 Swagger
  2. Middlewares 是否包含 Swagger
  3. Swagger:IsEnabled 是否为 true

只配了 Services 没配 Middlewares,通常表现就是服务注册成功了,但浏览器端没有 Swagger UI。

为什么启动时报 XML 文件找不到​

最常见原因是:

  • 项目没有开启 XML 文档输出
  • XmlCommentsPath 写错了
  • 发布目录里没有把 XML 一起带上

优先先看运行目录里是否真的有目标 XML 文件。

为什么页面能打开,但没有接口说明和模型说明​

这通常是 XML 文件没生成,或者只挂了主项目 XML,没有把 DTO 所在类库 XML 一起引入。

为什么页面里没有认证按钮​

优先检查 SecurityScheme.SecurityEnabled 是否为 true。
如果已经开启,再确认 BearerName 和你们实际使用的请求头名称是否一致。

下一步看哪里​