从查询字符串 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]
}
`
我的操作方法中有一个参数: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]
}
`