asp.net-core - ASP.Net Core Swagger 如何忽略默认参数值
问题描述
有没有办法“抑制” SwaggerUI 为可选参数预先选择默认值的方式?我们仍然希望这些参数包含在生成的文档中,只是没有选择值。这是它在 SwaggerUI 2.x 中的工作方式,但看起来 3.x 不再是这种情况
编辑 - 添加示例以澄清我的问题。
例如 - 假设您有以下端点:
[HttpGet]
public dynamic GetSomething(
string filter1,
string filter2,
bool shouldIFilter = false,
SomeEnum enumValue = SomeEnum.Whatever)
在 swagger 中,当您单击“试用”时,shouldIFilter和enumValue输入字段将具有已选择的方法签名中指定的默认值。相反,我希望这些字段没有选择任何值,以便在单击执行时它们不包含在查询中。
基本上,请求 url 应该是这样的:http ://some.url.com/v3/search?filter1=afilter&filter2=anotherfilter
(没有 &shouldIFilter=false&enumValue=Whatever)
--- 编辑:2019 年 5 月 20 日 ---
在下面接受 Helder 的建议时,我尝试注入 js 来处理这个问题。我发现的第一件事是,在单击“试用”按钮之前,输入字段不存在。而这个按钮是不存在的,直到您展开列表中的特定操作!?!但是,在将元素添加到 DOM 时连接观察者以设置我想要的值后,我能够成功更改所选值。
但是当您单击执行时,这些值会刷新以匹配原始规范 - 我的 js 不会再次触发以更改我希望它们成为的值。
我开始认为这可能是不可能的。虽然我在想我可能会尝试创建一个 SwaggerUI 插件,它可能能够做到这一点——但我也不预计会有很大的成功。
其他人有什么想法吗?
解决方案
为了结束这个循环,我想分享我最终为解决这个问题所做的事情(尽管我们还没有决定是否真的要继续前进)。
由于使用 React 的 Swagger UI 3.x,尝试注入 JS 最终太麻烦了——我能够在 UI 中更改特定参数的选定值,但是一旦您单击“执行”,它们就会“重置”回来为默认值。
相反,我最终添加了一个 IParameterFilter 来更改参数默认值,并确保每个参数都被正确记录以显示默认值是什么
public void Apply(OpenApiParameter parameter, ParameterFilterContext context)
{
if (parameter.In != ParameterLocation.Query) return;
// readonly list to limit which parameters have this applied
if (_parametersToUnSet.Contains(parameter.Name))
{
parameter.Description = $"*Default value*: {parameter.Schema.Default}";
parameter.Schema.Default = null;
}
}
推荐阅读
- html - 在菜单栏下方提供图像后,下拉菜单不可见
- python - 带有 pyqt 信号的 Cython
- authentication - 如何弄清楚如何使用 http 请求对自己进行身份验证
- moodle - 如何直接从服务器配置 Moodle O365 SSO?
- javascript - 如何用javascript切换不同的div
- linux - 如何添加几个平方的总和(bourne 脚本)
- c# - C# LINQ - 道具字符串的值为 System.Collections.Generic.List`1[System.String]
- python - 从python中的元组内部删除重叠的数字,这样没有2个元组具有相同的开始或结束数字
- android - 使用带有 TextInputLayout 的线性布局但遇到问题
- sql-server - SQL中多条记录重叠期间如何新建记录