c# - 如何在 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;
});
解决方案
在 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");
}
相对路径可用于使用 ./ 或 ../ 的端点
推荐阅读
- django - “文件上传”按钮在 django 中不可见(虽然在 django 管理面板中可见)
- node.js - 在 fastify 中使用通配符路由
- python - 如何在 Python 包中包含 tar.gz 文件?
- google-cloud-platform - 使用谷歌云功能记录文件下载并将文件下载到客户端
- graphql - 无法为graphql中的不可空字段返回null
- laravel - 是否可以在用户使用一次后不允许用户访问 Create CRUD?
- rust - Why is there is no dedicated method for creating a String from a UTF8-encoded array?
- c# - What is the proper way of handling object reference when applying projections in EF Core?
- linux - HAProxy reqrep 请求操作
- android - 如何在 android studio 的 avd manager 操作选项中启用灰色停止按钮?