加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 如何使用Angular $资源发送x-www-form-urlencoded

发布时间:2020-12-17 09:52:52 所属栏目:安全 来源:网络整理
导读:我正在尝试向服务器提交POST请求,该服务器只接受x-www-form-urlencoded格式的数据. 当我在Postman上测试时,它可以工作.例如,预览标题如下所示: POST /api/signin HTTP/1.1 Host: myproj.herokuapp.com Cache-Control: no-cache Content-Type: application/x
我正在尝试向服务器提交POST请求,该服务器只接受x-www-form-urlencoded格式的数据.

当我在Postman上测试时,它可以工作.例如,预览标题如下所示:

POST /api/signin HTTP/1.1
    Host: myproj.herokuapp.com
    Cache-Control: no-cache
    Content-Type: application/x-www-form-urlencoded

    email=joe%40gmail.com&password=1234567

但是,当我从我的应用程序运行它时,在Chrome控制台中查看的标题如下所示:

Remote Address:10.10.10.250:80
    Request URL:http://myproj.herokuapp.com/api/signIn
    Request Method:POST
    Status Code:400 Bad Request
    Request Headersview source
    Accept:application/json,text/plain,*/*
    Accept-Encoding:gzip,deflate
    Accept-Language:en-US,en;q=0.8
    Connection:keep-alive
    Content-Length:53
    Content-Type:application/x-www-form-urlencoded; charset=UTF-8
    Host:rapidit.herokuapp.com
    Origin:http://localhost
    Referer:http://localhost/rapid/v3/src/app/index/
    User-Agent:Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/39.0.2171.71 Safari/537.36
    Form Dataview parsed
    {"email":"joe@gmail.com","password":"1234567"}

显然,它不是以正确的格式发送数据.

这就是我的Angular工厂中的样子(带有硬编码的登录数据):

var LoginResource = $resource("http://myproj.herokuapp.com/api/signIn",{},{
         post: {
            method: "POST",isArray: false,headers: {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'}
        }
    });
    var loginUser = function (){
        return LoginResource.post( 
            {
                email: "joe@gmail.com",password: "1234567" 
            }
            ).$promise; //this promise will be fulfilled when the response is retrieved for this call
    };
    return loginUser;

如何以所需格式将数据发送到POST?

默认情况下,Angular使用application / json并不足以将头设置为url encode,你必须实际转换数据,你可以通过在$resource服务上使用de transformRequest选项来实现.这就是它的样子.
angular.module("AuthModule")
.factory("authResource",['$resource','appSettings',function ($resource,appSettings) {

    return {
        login: $resource(appSettings.serverPath + '/Token',null,{
               loginUser: {
                   method: 'POST',headers: { 'Content-Type': 'application/x-www-form-urlencoded' },transformRequest: function (data,headersGetter) {
                       var str = [];
                       for (var d in data)
                           str.push(encodeURIComponent(d) + "=" + encodeURIComponent(data[d]));
                       return str.join("&");
                   }
               },})
    }

}]);

P / D:我没写这个.这段代码来自一个复数的课程,名为Angular Front to Back with Web API.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读