c# - Swagger - 隐藏 api 版本参数
问题描述
是否可以隐藏“api-version”和“x-api-version”参数?
services.AddApiVersioning(config =>
{
config.ReportApiVersions = true;
config.DefaultApiVersion = new ApiVersion(1, 0);
config.AssumeDefaultVersionWhenUnspecified = true;
config.ApiVersionReader = ApiVersionReader.Combine(
new QueryStringApiVersionReader(),
new HeaderApiVersionReader()
{
HeaderNames = { "x-api-version" }
});
});
services.AddVersionedApiExplorer(
options =>
{
// note: the specified format code will format the version as "'v'major[.minor][-status]"
options.GroupNameFormat = "'v'VVV";
options.DefaultApiVersionParameterDescription = "Do NOT modify api-version!";
});
我已经检查了实现“RemoveVersionFromParameter”方法的how-to-set-up-swashbuckle-vs-microsoft-aspnetcore-mvc-versioning,但在这种情况下,Swagger 页面会丢失 api 版本并始终使用默认的 v1.0 . 如代码片段所示,我使用的是 QueryStringApiVersionReader 和 HeaderApiVersionReader,但我不想支持 url api 版本控制。
注意:API 确实有多个适用于所有版本的 swagger json 页面(例如 V1、V1.1、V2.0)
解决方案
您可以尝试操作过滤器。这类似于 Helder 的解决方案,但实现不必在文档级别,因此看起来更简单:
public void Configure(SwaggerGenOptions options)
{
// Filter out `api-version` parameters globally
options.OperationFilter<ApiVersionFilter>();
}
internal class ApiVersionFilter : IOperationFilter
{
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
var parametersToRemove = operation.Parameters.Where(x => x.Name == "api-version").ToList();
foreach (var parameter in parametersToRemove)
operation.Parameters.Remove(parameter);
}
}
推荐阅读
- c++ - Cuda 基本程序(将值写入矩阵和 std:cout 不起作用);主函数未启动
- c - 如何将字体设置为用户使用字体选择器选择的字体?
- php - 删除获取请求的 url .php 扩展名和参数?
- vue.js - Vue js如何使用props值到v-model
- nginx - 使用 nginx 反向代理丢失 POST 请求正文
- arrays - 如何将 json 数据显示到 laravel 刀片中?
- php - php sqlsrv 通过多台服务器连接到一个特定的数据库
- java - 如何通过 LLRP 从 EPC RFID 标签读取用户数据(内存)?
- typescript - 如何修复 no-unsafe-any 规则?
- ios - 如何在 Swift 中使用查询语句检索数据?