asp.net-core - ASP.Net Core Swagger如何忽略默认参数值

标签 asp.net-core swagger swagger-ui swashbuckle

有没有办法“抑制”SwaggerUI 为可选参数预选默认值的方式?我们仍然希望这些参数包含在生成的文档中,只是没有选择任何值。这是它在 SwaggerUI 2.x 中的工作方式,但在 3.x 中似乎不再如此

编辑 - 添加示例以阐明我的问题。

例如 - 假设您有以下端点:

[HttpGet]
public dynamic GetSomething(
     string filter1, 
     string filter2, 
     bool shouldIFilter = false, 
     SomeEnum enumValue = SomeEnum.Whatever)

在 swagger 中,当您单击“试用”时,shouldIFilterenumValue 输入字段将具有已选择的方法签名中指定的默认值。 相反,我希望这些字段没有选择任何值,以便在您单击执行时它们包含在查询中。

基本上,请求 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/

相关文章:

asp.net-core - ASP.Net Core WebApi - 存储来自 ActionFilter 的值以在 Controller 中访问

apache - 它是否需要在我的 https apache 代理服务器后面的 Kestrel 中使用 https?

c# - 为什么使用 Angular 模板的 .Net Core Web 应用程序需要安装 NodeJs?

java - 为什么 @ApiModelProperty 注释的 "example"属性中有多余的反斜杠?

python - Swagger-ui 连接未找到 Python 嵌套函数

c# - dot Net Core MVC 中的 HttpMethodAttribute 存在奇怪的歧义

c# - .Net Core 2.2/Kestrel/Swagger 禁用分块/编码

java - 从现有 REST api 生成 Swagger 文档

java - swagger-ui 中的 OPTIONS、HEAD、PATCH 方法,但 RestController 中没有

java - 如何让 maven swagger codegen 插件使用继承生成 Java 类?