想象一下,我有一个动作的WebAPI定义如下:使用字典式的数据类型扬鞭
[HttpGet]
public string GetFirstValue(KeyValuePair<string, string>[] data)
{
data = data ?? new KeyValuePair<string, string>[0];
return data.Any() ? data.ElementAt(0).Value : "No items supplied";
}
我有一个模型,粘合剂,每一个查询字符串参数转换为数组条目。
你会这样称呼它:
http://localhost/MyController/GetFirstValue?Fruit1=Apple&Fruit2=Banana
的模型粘结剂将其转换成类似[{Fruit1=Apple},{Fruit2=Banana}]
一个数组,动作返回Apple
(因为这是第一个条目)。
我想使用Swagger对此进行记录,但Swagger UI的默认实现将最终生成一个将所有数据放入多个查询字符串参数(称为data
)的URL,这不是我想要公开我的API的方式。
http://localhost:9102/MyController/GetFirstValue?data=Fruit1%3DBanana&data=Fruit2%3DApple
任何想法?我很高兴在我的操作参数中使用不同的数据类型,例如Dictionary<string, string>
或IEnumerable或类似的 - 只要它是提供任意键/值的可扩展机制即可。
是的,这就是我的想法。我们确实需要任意参数的东西 - 在我们的例子中,它是用来指定一个过滤器列表,在过滤器上的数据键在运行时被定义。阙血清。 –
嗯,有点笨重,但如何有一个“键”参数和“价值”参数,这两种类型的数组[字符串]?然后,人们可以调用http:// localhost/MyController/GetFirstValue?key = fruit1&value = apple&key = fruit2&value = banana –
是的,我也可以使用“?filter = key1%3Dvalue1&filter = key23Dvalue2”,但这两种查询在查询时看起来都很笨重字符串已经是KV对! –