否';访问控制允许原点';请求的资源-AngularJS上存在标头
当我试图从代码内部运行web服务时,会出现此错误。我试着找到它,并尝试了许多我在网上找到的解决方案。粘贴下面的代码否';访问控制允许原点';请求的资源-AngularJS上存在标头,angularjs,ajax,cors,cross-domain,Angularjs,Ajax,Cors,Cross Domain,当我试图从代码内部运行web服务时,会出现此错误。我试着找到它,并尝试了许多我在网上找到的解决方案。粘贴下面的代码 XMLHttpRequest cannot load http://mywebservice. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9000' is therefore not allowed access. 当
XMLHttpRequest cannot load http://mywebservice. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9000' is therefore not allowed access.
当我从URL栏点击web服务时,它工作正常。如何解决这个问题?请帮忙 这是一个问题。您可以在angular中更改一些设置-这些是我通常在angular.config方法中设置的设置(并非所有设置都与CORS相关):
您还需要配置您的Web服务-详细信息将取决于您使用的服务器端语言。如果您使用网络监控工具,您将看到它最初发送一个选项请求。您的服务器需要适当响应以允许CORS请求
它在浏览器中工作的原因是它不会发出跨原点请求,而您的角度代码是。如果您使用的是chrome:尝试打开带有参数的chrome以禁用web安全,如下图所示:
这就是我的工作方式。适用于使用括号和AngularJS进行测试的Windows用户 1) 转到您的桌面 2) 右键单击桌面,在弹出式下拉对话框中查找“新建”,它将展开 3) 选择快捷方式 4) 将打开一个对话框 5) 点击浏览,寻找谷歌浏览器 6) 单击Ok->Next->Finish,它将在您的桌面上创建google快捷方式 7) 现在右键点击你刚刚创建的谷歌浏览器图标 8) 单击属性 9) 在目标路径中输入此选项
$httpProvider.defaults.useXDomain = true;
$httpProvider.defaults.withCredentials = true;
delete $httpProvider.defaults.headers.common["X-Requested-With"];
$httpProvider.defaults.headers.common["Accept"] = "application/json";
$httpProvider.defaults.headers.common["Content-Type"] = "application/json";
10) 省省吧
11) 双击新创建的chrome快捷方式,并通过地址栏中的链接,它就会工作。在客户端,您可以通过
"C:\Program Files\Google\Chrome\Application\chrome.exe" --args --disable-web-security
但是,如果仍然返回错误,这意味着您发出请求的服务器必须允许CORS请求,并且必须为此进行配置。Chrome Webstore有一个扩展,当页面中出现试图访问不同主机的异步调用时,该扩展为您添加“Access Control allow Origin”头 扩展名是:“允许控制允许原点:”,这是链接:我得到了 不存在“访问控制允许来源”标题 问题在于我提供的URL。我提供的URL没有路由,例如,
https://misty-valley-1234.herokuapp.com/
当我添加路径时,它起作用,例如。,
https://misty-valley-1234.herokuapp.com/messages
。对于GET请求,它以任何一种方式工作,但是对于POST响应,它只在添加的路径下工作。在我的例子中,我试图从使用大量角度代码的MVC应用程序中访问localhost上的WebAPI服务。我的WebAPI服务通过Fiddler运行良好。有一次我花了一点时间将MVC应用程序配置为使用IIS而不是IIS Express(Visual Studio的一部分),它运行得很好,没有向任何一个区域添加任何与CORS相关的配置。我添加了这个,它对我来说运行得很好
web.api
app.config(['$httpProvider', function($httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
}
]);
然后,您将使用cors调用模型:
在控制器中,您将在全局范围或每个类的顶部添加。这取决于你
config.EnableCors();
此外,当您将此数据推送到Angular时,它希望看到.cshtml文件也被调用,或者它将推送数据但不填充视图
[EnableCorsAttribute("http://localhost:51003/", "*", "*")]
我希望这对任何人都有帮助,我花了一些时间来理解实体框架,以及为什么CORS如此有用 我有一个解决方案,它适合我:
(function () {
"use strict";
angular.module('common.services',
['ngResource'])
.constant('appSettings',
{
serverPath: "http://localhost:51003/About"
});
}());
//Replace URL with the appropriate path from production server.
在“”中,必须有一个回调参数,该参数返回带有数据的JSON\u回调。下面有一个示例,效果非常好
app.controller('LoginController', ['$http', '$scope', function ($scope, $http) {
$scope.login = function (credentials) {
$http({
method: 'jsonp',
url: 'http://mywebservice',
params: {
format: 'jsonp',
callback: 'JSON_CALLBACK'
}
}).then(function (response) {
alert(response.data);
});
}
}]);
示例输出:
$scope.url = "https://angularjs.org/greet.php";
$http({
method: 'jsonp',
url: $scope.url,
params: {
format: 'jsonp',
name: 'Super Hero',
callback: 'JSON_CALLBACK'
}
}).then(function (response) {
alert(response.data);
});
将此扩展插件用于chrome。 允许您从任何源使用ajax请求任何站点。添加到响应“允许控制允许原点:*”标题
将
get
替换为jsonp
:
{"name":"Super Hero","salutation":"Apa khabar","greeting":"Apa khabar Super Hero!"}
这是服务器端的一个问题。您必须将客户端地址添加到服务器公开的API中。如果您使用的是Spring框架,您可以从org.springframework.web.bind.annotation.CrossOrigin注释@CrossOrgin
例如:@CrossOrigin(origins=“”)$http.get(‘(数据){alert(数据);});}我想你在url中漏掉了“”。你没有任何答案可以接受吗?这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论-您可以随时在自己的帖子上发表评论,一旦你有了它,你就可以在任何帖子上发表评论了。请看一下这个链接:@XelharK你说的不确定是否使用trolling是什么意思?这个解决方案基本上会出于开发目的禁用浏览器中的安全检查。只要您打算在自己的计算机上使用该脚本,就可以了,但99%的情况下,当有人开发一个需要一些服务器请求的应用程序时,这个问题就会发生,并且他可能会在某个时候向公众发布该应用程序。这个解决方案只会让它在你的机器上工作,它只是一个简单的暂时绕过问题,根本不是一个解决方案。@XelharK这就是我试图达到的目的。您应该创建两个chrome应用程序的副本。一个是用于浏览网页的安全应用程序,另一个用于测试。我希望这有助于澄清问题,这将使它工作,但只在您的机器上。如果这就是您所需要的,那么我想这是可行的,但问题仍然没有解决,这只是一种暂时的解决方法。@XelharK yes仅在本地计算机上进行本地开发和测试。我意识到,在部署到生产环境后,它可以与具有安全设置的普通浏览器一起工作,因为此时我正在访问我的外部应用程序
$scope.url = "https://angularjs.org/greet.php";
$http({
method: 'jsonp',
url: $scope.url,
params: {
format: 'jsonp',
name: 'Super Hero',
callback: 'JSON_CALLBACK'
}
}).then(function (response) {
alert(response.data);
});
{"name":"Super Hero","salutation":"Apa khabar","greeting":"Apa khabar Super Hero!"}
$http.jsonp('http://mywebservice').success(function ( data ) {
alert(data);
});
}