Http.post 请求的资源上不存在“Access-Control-Allow-Origin”标头
Posted
技术标签:
【中文标题】Http.post 请求的资源上不存在“Access-Control-Allow-Origin”标头【英文标题】:Http.post No 'Access-Control-Allow-Origin' header is present on the requested resource 【发布时间】:2015-12-21 12:34:00 【问题描述】:所以我试图从 Angular 向我的 MVC 帐户控制器调用 http.post 请求来执行 externallogin 方法。我不断收到错误消息“请求的资源上不存在‘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 + ",,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,但没有任何改变。有人能解释一下如何解决这个问题吗?
【问题讨论】:
您是否在我们的服务器上启用了 Access-Control-Allow-Origin: * 【参考方案1】:尝试在您的发布请求中设置一些标题。例如,您可以进行一些自定义:
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'
);
希望这会有所帮助!
编辑:以下似乎有效(阅读下面的 cmets):
$http(
url: '/Account/ExternalLogin',
dataType: 'json',
method: 'POST',
data:
provider: provider,
ReturnUrl: returnUrl
);
【讨论】:
所以我尝试像您提供的那样在服务 js 文件中添加它,但没有运气。给了我同样的错误...我只是将这些标题添加到错误的位置吗? 你很好,这应该在你的app.js
上,但只要它包含在你的主 HTML 文件中,位置就无关紧要了。这可能是一件很难调试的事情。另外两件事要尝试:确保您从服务器(本地主机)运行 Angular 应用程序,而不是仅从文件系统打开 .html 文件。其次,尝试同时指定$http.defaults.headers.post['Content-Type'] = 'application/json'
或您发送的任何内容。
哦!还有一件非常重要的事情!确保您也在发布请求中发送数据!像这样 $http( url: '/Account.ExternalLogin', dataType: 'json', method: 'POST', data: provider: provider, ReturnUrl: returnUrl, , headers: "Content-Type": "应用程序/json"
嗯。所以如果我进行以下更新,我会得到同样的错误。我认为 $http.post 和您的方法没有什么不同,因为它能够到达控制器。在控制器运行之后,使用了 dispose 方法,这就是它得到错误的地方。我尝试将自定义标头添加到 Web.Config 文件中,但也没有运气。谢谢!
嘿嘿让它工作了。包括您的更新后,我发现了一些拼写错误,这真的把我搞砸了。谢谢以上是关于Http.post 请求的资源上不存在“Access-Control-Allow-Origin”标头的主要内容,如果未能解决你的问题,请参考以下文章
django中的“请求的资源上不存在'Access-Control-Allow-Origin'标头”
如何解决请求的资源上不存在“Access-Control-Allow-Origin”标头
请求的资源发布请求上不存在“Access-Control-Allow-Origin”标头