否';访问控制允许原点';请求的资源-AngularJS上存在标头

否';访问控制允许原点';请求的资源-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. 当

当我试图从代码内部运行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.
当我从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);
    });
}