通过 JSON 将 JavaScript 参数字典发送到 MVC 控制器
本文关键字:MVC 控制器 字典 JSON JavaScript 参数 通过 | 更新日期: 2023-09-27 17:56:04
我正在使用第三方库,无法真正更改将数据发布到我的MVC 5控制器的方式。
我不知道如何设置我的模型来接收数据。
该 json 是以下...
{
"expiration":"2015-06-14T21:02:52.969Z",
"conditions":[
{"acl":"private"},
{"bucket":"anyoldbucket"},
{"Content-Type":"application/pdf"},
{"success_action_status":"200"},
{"key":"somekey"}
]
}
我尝试像这样设置我的模型...
public class AwsSignatureRequestViewModel
{
public DateTime expiration { get; set; }
public Dictionary<string, string> conditions { get; set; }
}
到期日期填写正确,我得到了正确数量的条件,但字典的键是数字(索引),值为 null
有什么建议吗?
如果你的模型很严格,你需要为每个子对象制作对象。但是,如果您有动态模型,则可以从请求中读取原始字符串并使用 Json.net 对其进行解析。
public ActionResult Test(string model)
{
Request.InputStream.Seek(0, SeekOrigin.Begin);
string jsonData = new StreamReader(Request.InputStream).ReadToEnd();
var dynamicObject = JObject.Parse(jsonData);
...
}
dynamicObject 将包含您的所有 json。
IINM,根据你得到的数据,你的AwsSignatureRequestViewModel
应该看起来像这样:
public class AwsSignatureRequestViewModel
{
public DateTime expiration { get; set; }
public List<Dictionary<string, string>> conditions { get; set; }
}
conditions
是一个"对象数组"。
按照您当前拥有模型的方式,数据将映射到类似以下内容(事实并非如此):
{
"expiration": "2015-06-14T21:02:52.969Z",
"conditions":
{
"acl": "private",
"bucket": "anyoldbucket",
....
},
.....
呵......