是否有一种方法可以“抑制” SwaggerUI为可选参数预选择默认值的方式?我们仍然希望这些参数包含在生成的文档中,只是没有选择任何值。这是它在SwaggerUI 2.x中的工作方式,但看起来3.x不再是这种情况
编辑-添加示例以阐明我的问题。
作为示例-假设您具有以下端点:
[HttpGet]
public dynamic GetSomething(
string filter1,
string filter2,
bool shouldIFilter = false,
SomeEnum enumValue = SomeEnum.Whatever)
大张旗鼓,当您单击“试用”时, shouldIFilter 和 enumValue 输入字段将具有已选择的方法签名中指定的默认值。 相反,我希望这些字段没有选择任何值,以便在单击“执行”时将它们不包含在查询中。
基本上,请求网址应类似于:http://some.url.com/v3/search?filter1=afilter&filter2=anotherfilter
(不带&shouldIFilter = false&enumValue =任何值)
---编辑:05/20/2019 ---
根据下面的Helder的建议,我尝试注入js来解决这个问题。我发现的第一件事是,在单击“试用”按钮之前,输入字段不存在。并且,在列表中展开特定的“操作”之前,此按钮不存在!但是,当连接观察者以将元素添加到DOM时根据需要设置值之后,我就能够成功更改所选值。
但是,当您单击Execute时,这些值将刷新以符合原始规范-并且我的js不会再次触发以更改我希望它们成为的值。
我开始认为这可能是不可能的。尽管我认为我可能会尝试创建一个可能能够做到这一点的SwaggerUI插件-但我也不希望在那里有很多成功。
还有其他想法吗?
答案 0 :(得分:0)
听起来像您一直在使用默认值来记录参数...
您应该为此使用说明字段,这是一个示例:
"parameters": [
{
"name": "x.lat",
"in": "query",
"description": "**Latitude**: a geographic coordinate that specifies the north–south position of a point on the Earth's surface.",
"required": false,
"type": "number",
"format": "float",
"maximum": 90,
"minimum": -90
},
{
"name": "x.lon",
"in": "query",
"description": "**Longitude**: a geographic coordinate that specifies the east-west position of a point on the Earth's surface.",
"required": false,
"type": "number",
"format": "float",
"maximum": 180,
"minimum": -180
}
],
swagger-ui中的内容如下:
http://swagger-net-test.azurewebsites.net/swagger/ui/index?filter=Location#/Location/Location_Get2
该模型的代码在这里:
https://github.com/heldersepu/Swagger-Net-Test/blob/master/Swagger_Test/Models/Location.cs
如果必须保留默认值,则必须inject JS禁用此功能,但是如果UI更改,则可能会中断
答案 1 :(得分:0)
要结束此循环,我想分享一下我最终为解决此问题所做的事情(尽管我们还没有决定是否要继续前进)。
由于使用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;
}
}