使用angular.js $ resource和ServiceStack Servies的CORS

Boa*_*ler 4 cors angularjs angularjs-resource

我有一个服务栈REST服务和一个angular.js客户端.Web托管在另一个端口上,然后是RESTService.

使用$ http检索数据但使用$ resource不起作用.

在REST服务中,我设置了以下全局标头:

 GlobalResponseHeaders =
                    {
                    { "Access-Control-Allow-Origin", "*" },
                    { "Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS" },
                    { "Access-Control-Allow-Headers", "X-Requested-With"}
                    }
Run Code Online (Sandbox Code Playgroud)

现在在angular.js中我可以读取成功读取$ http的方法

$http({
        method:'get',
        url:address,
        requesttype:'application/json'
    }).success(function(data) {
        $scope.ServiceStatus = data;
    });
Run Code Online (Sandbox Code Playgroud)

但使用$ ressource读取相同的地址不起作用我的工厂代码是:

myApp.factory('qaServiceStatus', function($resource){
  return $resource('http://localhost:1338/api/status', {}, {
    query: {method:'GET', headers: {'Content-Type': 'application/json'}, params:{}}

    });
});
Run Code Online (Sandbox Code Playgroud)

我在控制器中以这种方式使用它

$scope.RESTStatus = qaServiceStatus.get({});
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:http://localhost:7000Access-Control-Allow-Origin不允许Origin.
和XMLHttpRequest无法加载http://localhost/api/status.原产地http://localhost:7000不被访问控制允许来源允许的.

我究竟做错了什么?

我也尝试将允许的原始内容更改为确切的地址,但这没有用

Joa*_*imB 8

这是响应客户端的API,不允许客户端发出CORS请求.我不知道你使用什么样的后端,但你需要检查你的Access-Control-Allow-Origin设置才能使它工作.

更新:

错误或功能,你将不得不问angularjs团队.他们解释atm:将port作为变量而不是端口.解决方案是逃避:

例:

$resource('http://localhost:1338\:1338/api/status', {}, {.....
Run Code Online (Sandbox Code Playgroud)

  • 这不是一个错误,`$ resource`接受使用冒号参数.@JoakimB,你应该用`\\:`来逃避冒号 (2认同)