对C#控制器的HTTP POST请求

对C#控制器的HTTP POST请求,c#,javascript,ajax,C#,Javascript,Ajax,我试图向我的C#控制器发出HTTP POST请求,但我需要发送一个数组中的数据,因此我尝试使用JSON.stringify,但当我开始调试时,控制器中的输入参数为NULL? 我从天气预报的外部API收到一个列表,所以我需要为列表中的每个项目创建新变量,它有一些字段,如:最大和最小温度、描述、湿度、压力等,然后用数据填充这些字段并将该变量添加到我的数组中。然后我需要将这个数组传递给我的控制器,这样我就可以将它存储在我的数据库中。。。 我应该在我的控制器中放入什么类型,这样它就不会为空?我是新来的,

我试图向我的C#控制器发出HTTP POST请求,但我需要发送一个数组中的数据,因此我尝试使用JSON.stringify,但当我开始调试时,控制器中的输入参数为NULL? 我从天气预报的外部API收到一个列表,所以我需要为列表中的每个项目创建新变量,它有一些字段,如:最大和最小温度、描述、湿度、压力等,然后用数据填充这些字段并将该变量添加到我的数组中。然后我需要将这个数组传递给我的控制器,这样我就可以将它存储在我的数据库中。。。 我应该在我的控制器中放入什么类型,这样它就不会为空?我是新来的,所以请帮忙,任何帮助都非常欢迎

下面是我要尝试的代码:

 var myData = { id:100, description:"some text"};
 var myDataArray= new Array();   
 myDataArray.push(myData);   
 $.ajax({
    dataType: "json",
    type: "POST",
    url: "/Weather1/Weather_post",
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify(myDataArray),
    success: function (data) {
        console.log(("OK"));
    },
    error: function (error)
    { console.log("NOT OK"); }
})
控制器:

[HttpPost]
public JsonResult Weather_post(String MyModuleList)

ajax
调用中缺少
processData:false
。否则,
ajax
将尝试将
数据
打包到URL查询字符串中。(见此处:)


如果
data
{'animal':'elephant','count':5}
并且
processData
true
(默认值),
ajax
POST
发送到URL
/Weather1/Weather\u POST?animal=elephant&count=5
,并且HTTP请求主体为空。这就是为什么需要
processData:false

模型绑定不知道“MyModuleList”是什么。您可以在这里使用强类型模型,MVC将JSON绑定到它

以JSON为例:

var data = {
    moduleList: [
        { id:100, description:"some text"}
    ];
};
和型号:

public class ModuleListModel
{
    public List<ModuleModel> ModuleList { get; set; }
}
public class ModuleModel
{
    public int Id { get; set; }
    public string Description { get; set; }
}
结合@Timothy Shields的回答:

在ajax调用中缺少processData:false。没有这个,, ajax将尝试将数据打包到URL查询字符串中。(见 此处:)

你应该表现得很好。

尝试以下方法:

 var myData = { id:100, description:"some text"};
 var myDataArray= new Array();   
 myDataArray.push(myData); 
 var param = JSON.stringify(myDataArray);  
 $.ajax({
     dataType: "json",
     type: "POST",
     url: "/Weather1/Weather_post",
     contentType: "application/json; charset=utf-8",
     data: {'MyModuleList': param },
     success: function (data) {
          console.log(("OK"));
     },
     error: function (error)
     { console.log("NOT OK"); }
 })

您可能需要将参数名与数据一起传递。比如:

 data: {'MyModuleList': JSON.stringify(myDataArray)},

查看这是否适用。

显示控制器操作的方法签名。如果不查看该方法,我们就看不出该方法失败的原因。[HttpPost]public JsonResult Weather\u post(字符串MyModuleList)客户端上似乎没有任何与参数名称对应的内容:
MyModuleList
如果没有该对应关系,参数将始终为
null
。尝试类似于
data:{MyModuleList:JSON.stringify(myDataArray)}
谢谢David,它实际上并不是这样工作的,但是当我将stringify添加到all中时,它就工作了。但现在我有了字符串,如何将它转换为我想要的类型?请帮助?仍然不好,如果我不使用stringify,它不会发送该请求,但使用stringify它会发送,但输入参数仍然为空…我尝试向上投票,但我不能,因为我是新来的,我的声誉只有6…当我得到15+1,再加上参考您的答案时有点内疚:)谢谢!我曾经有过这样的经历,但我不得不改变一些事情,所以你真的帮助了我!
 data: {'MyModuleList': JSON.stringify(myDataArray)},