在尝试自定义路由模板时,有没有办法在 UseSwagger 中使用字符串插值?

问题描述 投票:0回答:1

当我想更改 swagger 中的默认路由模板时,我遇到了一种情况。如果我在路由模板中使用字符串插值,编译器会抱怨我的代码中没有的

documentName
变量,但根据 Swagger 文档,该部分是必需的。我该如何解决?

var routePrefix = "api-docs";
app.UseSwagger(c => c.RouteTemplate = $"{routePrefix}/swagger/{documentName}/swagger.json"); // This is the error

app.UseSwaggerUI(c => {
   foreach (var description in apiVersionDescriptionProvider.ApiVersionDescriptions) {
      c.SwaggerEndpoint($"/{routePrefix}/swagger/{description.GroupName}/swagger.json", description.GroupName.ToUpperInvariant());
      c.RoutePrefix = routePrefix;
   }
});
asp.net-core swagger swagger-ui
1个回答
0
投票

{documentName}
更改为
{documentName}
,因为您使用
$
。此外,您需要更改
RouteTemplate
SwaggerEndpoint
,如下所示,因为默认的路由前缀是
swagger
:

var routePrefix = "api-docs";

var apiVersionDescriptionProvider = app.Services.GetRequiredService<IApiVersionDescriptionProvider>();
app.UseSwagger(c => c.RouteTemplate = $"{routePrefix}/{{documentName}}/swagger.json"); // This is the error

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

请求网址应为:

https://localhost:portNumber/api-docs/index.html

© www.soinside.com 2019 - 2024. All rights reserved.