我对带有HTTP授权标头的CORS请求有疑问:
在我看来,Web浏览器未通过POST请求发送Authorization标头,是否有解决方法?
这是我的Angular代码:
var app = angular.module('app', []) .config(['$httpProvider', function($httpProvider) { $httpProvider.defaults.useXDomain = true; delete $httpProvider.defaults.headers.common['X-Requested-With']; }]); app.controller('ctrl', function ($scope, $http) { $scope.insert = function () { $http.post('http://my.api.com/Insert', { headers: { 'Authorization': 'Basic dGVzdDp0ZXN0', 'Content-Type': 'application/x-www-form-urlencoded' }, data: { 'Code': 'test data' }, withCredentials: true }); }; });
在服务器端,我在web.config中有这个
<httpProtocol > <customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> <add name="Access-Control-Allow-Headers" value="Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With" /> <add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" /> <add name="Access-Control-Allow-Credentials" value="true" /> </customHeaders> </httpProtocol>
您使用$http.post不正确。第二个参数是您需要发送到服务器的 数据 ,您不能设置这样的标头。在您的情况下,它将把 整个对象 作为 JSON有效负载 发送 __
$http.post
试试这个:
$http({ url:'http://my.api.com/Insert', method:"POST", headers: { 'Authorization': 'Basic dGVzdDp0ZXN0', 'Content-Type': 'application/x-www-form-urlencoded' }, data: { 'Code': 'test data' } });