自定义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
相关产品推荐
相关产品推荐

