通过 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 将 JavaScript 参数字典发送到 MVC 控制器

如果你的模型很严格,你需要为每个子对象制作对象。但是,如果您有动态模型,则可以从请求中读取原始字符串并使用 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",
       ....
   },
   .....

呵......