7

我对带有 HTTP 授权标头的 CORS 请求有疑问:

在我看来,网络浏览器没有发送带有 POST 请求的授权标头,有什么办法解决这个问题吗?

这是我的角度代码:

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>
4

2 回答 2

11

你使用$http.post不正确。第二个参数是你需要发送到服务器的数据,你不能这样设置标题。在您的情况下,它将整个对象 作为JSON 有效负载发送

尝试这个:

$http({
       url:'http://my.api.com/Insert',
       method:"POST",
       headers: {
                  'Authorization': 'Basic dGVzdDp0ZXN0',
                  'Content-Type': 'application/x-www-form-urlencoded'
       },
       data: {
              'Code': 'test data'
       }
  });
于 2013-10-13T08:56:32.677 回答
0

withCredentials - {boolean} - 是否在 XHR 对象上设置 withCredentials 标志。有关更多信息,请参阅带有凭据的请求。

于 2013-10-13T08:45:23.860 回答