【问题标题】:AngularJS and Cross Domain POSTAngularJS 和跨域 POST
【发布时间】:2013-10-21 00:28:39
【问题描述】:

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

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

这是我的 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>

【问题讨论】:

  • 你找到解决方案了吗?

标签: javascript asp.net angularjs


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您错误地使用了$http.post。第二个参数是你需要发送到服务器的data,你不能这样设置headers。在您的情况下,它将发送整个对象 作为 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'
           }
      });
    

    【讨论】:

    • 就是这样,谢谢!我必须解决的另一件事是,如果您有 Access-Control-Allow-Origin:*,则不能使用 withCredentials: true
    • @Veshraj Joshi:你的情况是什么?
    • 所以基本的 dGVzdDp0ZXN0 部分,那是什么? 'dGVzdDp0ZXN0' 代码是强制性的吗?
    • @khanh 我正在尝试使用 Angular js 和域 laravel 5.1(php 框架)在本地机器上制作 html 文件;如果 html 文件在同一个域中,则工作正常;否则不起作用,但令人惊奇的是,“get”方法在任何地方都可以使用上述代码正常工作。
    • @Dezmen CEO Sykes:“dGVzdDp0ZXN0”代码是强制性的:en.wikipedia.org/wiki/Basic_access_authentication。但它应该根据当前用户具有不同的价值。
    猜你喜欢
    • 1970-01-01
    • 2011-08-19
    • 2014-11-18
    • 1970-01-01
    • 2013-09-25
    • 2019-03-29
    • 1970-01-01
    • 2017-02-16
    • 2011-07-26
    相关资源
    最近更新 更多