从查询字符串 ASP.NET 获取字典 <int, int[]> MVC

Get Dictionary<int, int[]> from query string ASP.NET MVC

我的操作方法中有一个参数:Dictionary<int, int[]> prop,我试图通过查询字符串设置它。但是当我使用这个时:

/Action?prop[0].Key=123&prop[0].Value[0]=123

字典参数不为空但没有元素。

我哪里做错了,我应该如何让它发挥作用?

注意:这是一个页面,所以它是一个没有正文的 HTTP GET 请求。

根据您的型号,您可能需要定制 ModelBinder。有关如何构建一个的更多信息,请参阅 Microsoft Reference

自定义模型绑定器可让您决定 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)

除了看起来更好并且不会泄露您的实施细节之外,这还意味着您不必担心 space 中的 运行。因为大多数浏览器不支持 URLs 超过 4000 个字符,所以如果您的字典更大,每次重复变量名称在 URL 房地产方面代价高昂。

[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] }

`