Angular $http.post:无法将带有数据的对象发送到服务器。数据作为字符串起作用,作为对象 - 不是

Posted

技术标签:

【中文标题】Angular $http.post:无法将带有数据的对象发送到服务器。数据作为字符串起作用,作为对象 - 不是【英文标题】:Angular $http.post: cannot send objects with data to server. Data as a string works, as an object - not 【发布时间】:2015-10-10 19:16:01 【问题描述】:

我想使用这个函数向服务器发送数据:

var _register = function (email, password, passconfirmation) 
    var data = 
        "Email": email,
        "Password": password,
        "ConfirmPassword": passconfirmation
    ;

    return $http.post('/api/Account/Register', data, 
        headers:  'Content-Type': 'application/x-www-form-urlencoded' 
    );

它不起作用。我的 ASP.net web api 没有收到任何数据。服务器端的每个变量都是“null”。但是当我这样做时:

var _register = function (email, password, passconfirmation) 
    var data = "email=" + email + "&password=" + password + "&ConfirmPassword=" + passconfirmation;

    return $http.post('/api/Account/Register', data, 
        headers:  'Content-Type': 'application/x-www-form-urlencoded' 
    );

一切都很好。问题是:第一种方式比第二种方式清晰得多,所以我想使用第一种方式。但我不知道出了什么问题:/

【问题讨论】:

查看这个答案 (***.com/questions/20226169/…) 【参考方案1】:

删除帖子中的标题或更改标题,如下所示

 headers:  'Content-Type': 'application/json' 

你的代码应该是

var _register = function (email, password, passconfirmation) 
    var data = 
        "Email": email,
        "Password": password,
        "ConfirmPassword": passconfirmation
    ;

    return $http.post('/api/Account/Register', data, 
        headers:  'Content-Type': 'application/json' 
    );

【讨论】:

【参考方案2】:

我过去曾遇到过这个问题。试试

JSON.stringify(data)

在将其传递给帖子之前。另一边的对象绑定器应该能够接受它。

【讨论】:

【参考方案3】:

你需要这样做..

从AngularJS开始,传输数据使用

Content-Type: application/json

 return $http.post('/api/Account/Register', 'dataObj' : data  , 
        headers:  'Content-Type': 'application/json' 
    );

你的数据应该是一对key/val,试试: 数据变量将在参数dataObj下到达服务器

【讨论】:

以上是关于Angular $http.post:无法将带有数据的对象发送到服务器。数据作为字符串起作用,作为对象 - 不是的主要内容,如果未能解决你的问题,请参考以下文章

Angular HTTP Post - 无法访问返回值[重复]

如何使用带有表单数据主体而不是 json 主体的 http 'POST'? (Angular2/打字稿)

带有 Windows 身份验证预检问题的 Angular 4 HTTP POST [重复]

Angular 2/4 如何将多个标题添加到 http post

Angular.js $http.post TypeError:无法读取未定义的属性“数据”

在 Angular 11 中,如何通过 API Gateway 将应用程序/json HTTP POST 到 AWS Lambda?