Ajax发布将JSON发送到结果为null的方法

时间:2019-02-04 15:37:49

标签: javascript c# jquery json model-view-controller

我不明白问题出在哪里。
我有一个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文本。

我想念什么?我是网络开发的新手,我将开始用脑袋破坏桌子。

1 个答案:

答案 0 :(得分:2)

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

尝试跳过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; }
}