我的操作方法中有一个参数:Dictionary<int, int[]> prop
,并且我正在尝试通过查询字符串进行设置。但是当我使用这个时:
/Action?prop[0].Key=123&prop[0].Value[0]=123
字典参数不为null,但没有元素。
我在做什么错了,我应该怎么做?
注意:这是一个页面,所以它是一个没有主体的HTTP GET请求。
答案 0 :(得分:0)
根据您的模型,可能需要自定义ModelBinder
。有关更多信息,请参见Microsoft Reference。
自定义modelbinder可让您决定URL查询参数的外观。例如,您可以构建一个看起来像这样的东西:
/Action?dict=(1;1,2,3)(17;90,16,12345)(88;1,2,5,7,8,9,3,4,5,6,7,8,9)
除了看起来更好并且不浪费您的实现细节之外,这还意味着您不必担心空间不足。由于大多数浏览器都不支持超过4000个字符的URL,因此,如果您的词典较大,则每次重复使用变量名在URL占用空间方面都是很昂贵的。
答案 1 :(得分:0)
使用[FromUri]
属性将参数标记为MVC控制器操作,如下所示:
public HttpResponseMessage ActionName([FromUri] Dictionary<int, int[]> prop)
{
...
}
在请求URI中,如下添加字典:
/actionName?prop[0].key=0&prop[0].value=11&prop[0].value=12&prop[1].key=1&prop[1].value=21&prop[1].value=22
这将导致prop
字典的填充如下:
`
道具:
{
0:[11,12],
1:[21,22]
}
`