首页 > 解决方案 > 如何在 v5 中为 Swagger 定义相对路径?

问题描述

我正在将我的 .NET Core 应用程序从 Swashbuckle v4 升级到 v5。我目前在 Startup.ConfigureServices 中有以下代码,它定义了相对路径:

app.UseSwagger(c => {
    c.PreSerializeFilters.Add((swaggerDoc, httpReq) => swaggerDoc.BasePath = "/folder/data");
});

我无法将其转换为 v5。我尝试了以下方法,但看不到在哪里设置路径:

c.PreSerializeFilters.Add((swagger, httpReq) =>
{
    var paths = new OpenApiPaths();
    var pathItem = new OpenApiPathItem();

    paths.Add("main", pathItem);
    swagger.Paths = paths;

});

标签: c#.net-coreswaggerswashbuckle

解决方案


在 v5 中,basePath 被替换为 Servers 根据: https ://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/1173

您可以使用 routeTemplate 和使用服务器从 ui 发出的请求的路径设置 json 文件的路径:

var basePath = "/v1";
 app.UseSwagger(c =>
    {
         c.RouteTemplate = "swagger/{documentName}/swagger.json";
         c.PreSerializeFilters.Add((swaggerDoc, httpReq) =>
    {
            swaggerDoc.Servers = new List<OpenApiServer> { new OpenApiServer 
                 { Url = $"{httpReq.Scheme}://{httpReq.Host.Value}{basePath}" } };
        });
    });

并配置用户界面:

app.UseSwaggerUi(options => 
     {
         options.swaggerEndpoint($"swagger/{apiVersion}/swagger.json, "my api v1");
     }

相对路径可用于使用 ./ 或 ../ 的端点


推荐阅读