在Asp Net Core中,当我们在控制器的Action中使用IDictionary类型的参数时,会遇到在URI中传递参数时的问题。具体表现为,当我们传递一个类似于以下格式的URI时:/api/values?key1=value1&key2=value2 时,IDictionary类型的参数只会包含key1的值,并且key2的值会被忽略。
这个问题的原因在于Asp Net Core将URI中的键值对参数解析为一个字典类型的对象,而在创建字典对象时,它只会包含第一个相同名称的键值对,而会忽略之后的所有相同名称的键值对。
为了解决这个问题,我们需要修改URI传递参数的方式,将参数包装成一个JSON字符串,然后在Action中通过反序列化解析为IDictionary对象。代码示例如下:
URI参数:/api/values?json={"key1":"value1","key2":"value2"}
代码:
[HttpGet]
public IActionResult Get([FromQuery] string json)
{
var dictionary = JsonConvert.DeserializeObject
这样,我们就可以通过传递JSON字符串来解决在URI参数中使用IDictionary类型的问题了。
上一篇:AspNetCore中的属性绑定
下一篇:AspNetCore中缺少范围头