4

私はservicestack 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"}
                    }

angular.js で、たとえば $http を使用してメソッドを正常に読み取ることができます

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

しかし、$ressource で同じアドレスを読み取っても機能しません。ファクトリのコードは次のとおりです。

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

    });
});

コントローラーでこのように使用します

$scope.RESTStatus = qaServiceStatus.get({});

私が得るエラーは次のとおりです: Origin http://localhost:7000is not allowed by Access-Control-Allow-Origin.
XMLHttpRequest を読み込めませんhttp://localhost/api/statushttp://localhost:7000Access-Control-Allow-Origin でオリジンが許可されていません。

私は何を間違っていますか?

また、許可されたオリジンを正確なアドレスに変更しようとしましたが、これは役に立ちません

4

1 に答える 1

8

これはクライアントに応答する API であり、クライアントのオリジンが CORS リクエストを行うことを許可しません。使用しているバックエンドの種類はわかりませんが、それを機能させるには Access-Control-Allow-Origin の設定を確認する必要があります。

アップデート:

バグまたは機能については、angularjs チームに問い合わせる必要があります。彼らは :port をポートではなく変数として解釈します。解決策は、次をエスケープすることです:

例:

$resource('http://localhost:1338\:1338/api/status', {}, {.....
于 2013-09-12T08:29:51.893 に答える