我正在尝试向服务器提交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选项来实现.这就是它的样子.
原文链接:https://www.f2er.com/angularjs/140399.htmlangular.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.