跳到主要内容
版本:3.0.0

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

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

组件概览

字段说明
组件名称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.jsonServicesMiddlewares 都包含了 Swagger
  • Swagger:IsEnabledtrue
  • 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 和你们实际使用的请求头名称是否一致。

下一步看哪里