有没有办法“抑制”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 的建议,我尝试注入(inject) js 来处理这个问题。我发现的第一件事是,在单击“试用”按钮之前,输入字段不存在。而这个按钮在你展开列表中的特定操作之前是不存在的!?!但是,在将元素添加到 DOM 时连接观察器以设置我想要的值后,我能够成功更改所选值。
但是当您点击“执行”时,这些值会刷新以匹配原始规范 - 我的 js 不会再次触发以更改我希望它们成为的值。
我开始认为这也许是不可能的。虽然我在想我可能会尝试创建一个 SwaggerUI 插件,它可能能够做到这一点 - 但我也不希望在那里取得很大的成功。
还有其他人有什么想法吗?
最佳答案
为了结束这个循环,我想分享一下我最终为解决这个问题所做的工作(尽管我们还没有决定是否要真正向前推进)。
由于使用 React 的 Swagger UI 3.x,尝试注入(inject) 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;
}
}
关于asp.net-core - ASP.Net Core Swagger如何忽略默认参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56118458/