You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义Swagger路由模板时使用字符串插值遇documentName错误的解决办法

解决Swagger RouteTemplate中documentName变量未定义的报错问题

问题核心是你混淆了C#字符串插值变量和Swagger路由模板占位符:

  • 用$做字符串插值时,{documentName}会被C#编译器当成需要替换的本地变量,但你没定义这个变量,所以触发报错。
  • 而Swagger文档里的{documentName}是框架内部的路由模板占位符,不需要你在C#代码里定义,会由Swagger运行时自动替换。

正确解决方法:

直接用字符串拼接,把你的C#变量routePrefix和包含Swagger占位符的模板部分组合,保留{documentName}作为模板的一部分:

var routePrefix = "api-docs";
app.UseSwagger(c => c.RouteTemplate = routePrefix + "/swagger/{documentName}/swagger.json");

app.UseSwaggerUI(c => {
   foreach (var description in apiVersionDescriptionProvider.ApiVersionDescriptions) {
      c.SwaggerEndpoint($"/{routePrefix}/swagger/{description.GroupName}/swagger.json", description.GroupName.ToUpperInvariant());
      c.RoutePrefix = routePrefix;
   }
});

额外说明:

SwaggerUI里的{description.GroupName}是合法的,因为这是你遍历得到的C#本地变量,和Swagger模板的占位符不是同一概念,不需要修改。

内容的提问来源于stack exchange,提问作者Hoang Minh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 14:45:56