首页 > 解决方案 > Ajax 将 JSON 发送到方法导致 null

问题描述

我不明白问题出在哪里。
我有一个 AJAX 调用,它将带有一些文件路径的对象传递给控制器​​以供下载。这是 AJAX 调用:

var listD = [];  
listD.push("Some Text");  
listD.push("Some other Text");  
var oList = {};  
oList.Urls=listD;  
                    $.ajax({  
                    method: 'POST',  
                    url: '/api/file/DownloadM/',  
                    data: JSON.stringify(oList),  
                    contentType: "application/json; charset=utf-8",  
                    success: function (response) {  
                        alert("OOOOOOK");  
                    },  
                    error: function (response) {  
                        alert("NOOOOOOO");  
                }  }); 

我的应用程序中有一个名为 DownloadUrls 的模型:

public class DownloadUrl
    {
        string[] Urls { get; set; }
    }

这是我的方法:

    [Route("api/file/downloadM/")]//{username}")]
    [HttpPost]
    public HttpResponseMessage DownloadM(DownloadUrl postedData) {
              --do some stuff---
    }

我不明白为什么我的postedData 是一个Urls 属性设置为null 的对象。如果我将postedData 声明为对象,我会得到我的JSON 文本。

我错过了什么?我是网络开发的新手,我会开始用我的头破坏桌子。

标签: javascriptc#jqueryjsonmodel-view-controller

解决方案


您不应该在 jquery Ajax 调用的数据字段中对传递的对象进行字符串化。

尝试跳过 JSON.stringify():

$.ajax({  
   method: 'POST',  
   url: '/api/file/DownloadM/',  
   data: oList,  
   contentType: "application/json; charset=utf-8",  
   success: function (response) {  
        alert("OOOOOOK");  
   },  
   error: function (response) {  
        alert("NOOOOOOO");  
   }
}); 

编辑:我还注意到您班级中的 Urls 属性未标记为公共。确保将其标记为公共,以便模型绑定器可以成功填充该属性。

public class DownloadUrl
{
      public string[] Urls { get; set; }
}

推荐阅读