控制器从javascript接收ajax post请求时获取空对象

控制器从javascript接收ajax post请求时获取空对象,javascript,c#,ajax,post,reactjs,Javascript,C#,Ajax,Post,Reactjs,我正在创建一个react javascript组件,它收集用户的信息,并使用ajax向url端点发送post请求。我的组件正在到达端点。以下是我的问题的示例代码: C#端点-控制器: [EnhancedRequireHttps] [HttpPost] public ActionResult MyMethod(MyObject myObject) {...} 我期待的对象: public class MyObject { public string Name;

我正在创建一个react javascript组件,它收集用户的信息,并使用ajax向url端点发送post请求。我的组件正在到达端点。以下是我的问题的示例代码:

C#端点-控制器:

[EnhancedRequireHttps]
    [HttpPost]
    public ActionResult MyMethod(MyObject myObject)
    {...}
我期待的对象:

public class MyObject
{
    public string Name;
    public string Number;
    public long Id;
    public int Code;
}
javascript数据:

this.props.newValues = {
    Name : "John",
    Number : "1234567890",
    Id : "1234",
    Code : 1
}
javascript ajax请求:

$.ajax({
        type: "POST",
        url: this.props.endpointurl, // Contains the endpoint
        data: this.props.newValues,

        success: function(response) {
        }.bind(this),

        error: function(err) {
        }.bind(this)
    });
以前,我将所有参数作为MyMethod的输入,如下所示:

[EnhancedRequireHttps]
    [HttpPost]
    public ActionResult MyMethod(string Name, string Number, long Id, int Code)
    {...}
这篇文章工作正常,但我正在尝试编写一个干净的代码,所以我创建了一个类来包含这些属性,当我这样做时,我的问题开始了

我尝试创建一个名为myObject的对象,在js代码中包含我的参数。 我还尝试使用$(this.props.newValues).serialize()或JSON.stringify(this.props.newValues)和dataType=“JSON”或contentType=“application/JSON”


感谢您的阅读和帮助,我来这里是为了澄清对我处境的任何疑问。:)

您需要指定contentType并将json作为字符串发送。见评论:

$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8", // Try to add this
    url: this.props.endpointurl,
    data: JSON.stringify(this.props.newValues), // And this

    success: function(response) {
    }.bind(this),

    error: function(err) {
    }.bind(this)
});

我添加了一些编辑信息来补充我的疑问,但是我现在正在试用你的代码,没有使用“charset=utf-8”,这很尴尬,但是我不确定你的解决方案是否有效,因为我在使用你的设置时遇到了CORS问题。有什么线索吗?我尝试将:添加到我的端点应用程序配置中,并将xhrFields:{withCredentials:true}添加到我的ajax调用中。抱歉,没有关于CORS的任何线索。无论如何,感谢您的帮助,我认为我需要做一点语法调整,以清除所有内容。正如我所说,我在MyObject类之前就已经让它工作了。如果使用
$.post()
:,则不需要设置contentType。如果您将一个对象传递给
数据
,它将为您更正stringify JSON。在控制台中调用JSON.stringify(this.props.newValues)将生成正确的JSON,例如:“{”Name“:”John“,”Number“:”1234567890“,”Id“:”1234“,”code“:1}”我尝试使用此方法,知道默认绑定器将处理JSON收入,但是我的请求在控制器上显示为空。你在你最喜欢的浏览器的网络工具中看到了什么?你能看到正在发送的有效载荷吗?如果是,请尝试与邮递员一起手动发送有效负载,以查看问题是否在服务器端:@DavidGilbertson正在发送有效负载:
Name:John Number:1234567890 Id:1234 code:1
,但控制器正在接收空对象。使用postman时也会发生同样的事情,只是为了澄清,对象是空的:long和int类型接收0(默认值)和null字符串(同样是默认值)