Http.post No' Access-Control-Allow-Origin'标头出现在请求的资源

时间:2015-09-24 02:20:48

标签: angularjs http http-headers cors access-control

所以我试图从angular到我的MVC帐户控制器调用http.post请求来执行externallogin方法。我一直收到错误" No' Access-Control-Allow-Origin'标头出现在请求的资源上。"所以我做了一些挖掘,似乎它与CORS有关。

 var chrome = 100;
    var width = 500;
    var height = 500;
    var left = (screen.width - width) / 2;
    var top = (screen.height - height - chrome) / 2;
    var options = "status=0,toolbar=0,location=1,resizable=1,scrollbars=1,left=" + left + ",top=" + top + ",width=" + width + ",height=" + height;
    window.open("about:blank", "login-popup", options);

    authService.externalLogin(provider, returnUrl).then(function (response) {

    })

var _externalLogin = function (provider, returnUrl) {
    _logOut();
    var deferred = $q.defer();
    $http.post(
'/Account/ExternalLogin', {
    provider: provider,
    ReturnUrl: returnUrl
}).success(function (response) {
deferred.resolve(response);}).error(function (err, status) {
_logOut();
deferred.reject(err);});
    return deferred.promise;
};

因此,这将进入控制器并创建相应的路径。但是当它完成方法时,它会产生错误,而不会重定向打开的窗口。

我尝试使用http://www.html5rocks.com/en/tutorials/cors/实现CORS,但没有任何改变。有人可以解释如何解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

尝试在帖子请求中设置一些标题。例如,您可以执行一些自定义:

app.run(function ($http) {
  // Sends this header with any AJAX request
  $http.defaults.headers.common['Access-Control-Allow-Origin'] = '*';
  // Send this header only in post requests. Specifies you are sending a JSON object
  $http.defaults.headers.post['dataType'] = 'json'
});

希望这有帮助!

编辑:以下似乎有效(请阅读以下评论):

$http({ 
  url: '/Account/ExternalLogin', 
  dataType: 'json', 
  method: 'POST', 
  data: { 
    provider: provider, 
    ReturnUrl: returnUrl 
  }
});
相关问题