AngularJS CORS Probleme
Den ich gesucht habe über 200 Seiten(vielleicht übertreibe, aber nicht viel), wie man in der Lage sein zu handhaben cors mit angularjs. Wir haben einen lokalen Rechner läuft ein web-API-server. Wir entwickeln eine client-Aufrufe an die API für die Daten. Beim ausführen der client von dem server, den wir empfangen von Daten kein problem. Wenn wir es aus einer anderen Domäne wir bekommen eine rote 200-Antwort, wenn Sie versuchen zum abrufen von Daten, und eine leere Antwort. Hier einige code:
var myApp = angular.module('Project', ['ngResource']);
myApp.config(function($routeProvider){
$routeProvider.
when('/new', {templateUrl:'templates/new.html', controller:'EditProjectController'}).
when('/mobile', {templateUrl:'templates/mobile.html', controller:'ProjectController'}).
when('/it', {templateUrl:'templates/it.html', controller:'ProjectController'}).
when('/writing', {templateUrl:'templates/writing.html', controller:'ProjectController'}).
when('/all', { templateUrl: 'templates/all.html' }).
when('/login', { templateUrl: 'partials/_login.html' }).
otherwise({ redirectTo: '/all' });
});
myApp.config(['$httpProvider', function ($httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
}
]);
myApp.controller('ProjectController',
function myApp($scope, $http, projectDataService, userLoginService) {
$http.defaults.useXDomain = true;
$scope.loadProject = function(){
projectDataService.getProject(function(project){
$scope.project = project;
})
};
$scope.loadProject();
}
);
myApp.factory('projectDataService', function ($resource, $q) {
var resource = $resource('http://webapiserver/api/:id', { id: '@id' });
return {
getProject: function () {
var deferred = $q.defer();
resource.query({ id: 'project' },
function (project) {
deferred.resolve(project);
},
function (response) {
deferred.reject(response);
});
return deferred.promise;
},
save: function (project) {
var deferred = $q.defer();
project.id = 'project/9';
resource.save(project,
function (response) { deferred.resolve(response); },
function (response) { deferred.reject(response); }
);
return deferred.promise;
}
};
});
Habe ich auch versucht, diese mit $http, aber bekomme ich die gleiche Antwort (oder deren fehlen):
myApp.factory("projectDataService", function ($http) {
return {
getProject: function (successcb) {
$http.get("http://webapiserver/api/project").
success(function (data, status, headers, config) {
successcb(data);
}).
error(function (data, status, headers, config) {
}
};
});
Wenn ich nur navigieren Sie zu der url, die mit der json im browser-es spuckt die Daten aus. Auf dem server sind wir so Kreuz Domäne Herkunft, die offensichtlich zu meiner vorherigen Aussage. Wie Sie sehen können ich bin die Implementierung der Header überschreibt in der Anwendung.config habe ich auch versucht, dass es direkt in mein controller... kein Unterschied...
3 Tagen nun auf diese Aufgabe.
Helfen mit, dies ist MEHR als geschätzt. Vielen Dank im Voraus.
InformationsquelleAutor der Frage Shane | 2013-07-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie möglicherweise ändern Sie Ihre Web-API ein bisschen. Ich traf das gleiche problem und schrieb einen Beitrag darüber, wie dieses Problem zu beheben.
Ich verwendet Sinatra für die API, ich weiß nicht, was Sprache, die Sie für Ihre webservices, aber ich denke, man kann es anwenden. Grundsätzlich müssen Sie den server so konfigurieren, zu akzeptieren, CORS fordert, indem Sie definieren, welche Ursprünge und welche HTTP-Methoden erlaubt.
Sagte Sie, dass Sie bereits aktivieren Sie es auf Ihrem server, aber was hast du denn genau ?
Finden Sie in diesem Beitrag weitere details : CORS mit angular.js
InformationsquelleAutor der Antwort T_Dnzt
Wenn Sie wollen, VERÖFFENTLICHEN Sie auf Ihrer WebApi mit Daten, dann müssen Sie ein wenig mehr zu tun für Chrome zu arbeiten. Sie müssen zum abfangen der preflight und die gehören den Kunden origin als erlaubt Herkunft.
Ob es eine bessere Lösung für dieses dann nach vielen Tagen der Arbeit an diesem problem ausschließlich die konnte ich nicht finden. Schließlich, das ist was für mich gearbeitet.
Glück...
InformationsquelleAutor der Antwort user3448990
Müssen Sie ändern Sie Ihre Web-API ein wenig zu behandeln, die cross-domain-requests.
Enthalten die Microsoft Asp-Net-Server mit Cors-Bibliothek in den Web-Api-Projekt und einige weitere code-level-änderungen, und Sie sind bereit zu gehen. Für mehr haben Sie einen Blick hier.
Ihre Eckige Teil ist völlig in Ordnung.
InformationsquelleAutor der Antwort Nitin Rawat
Wenn es
ASP.NET
WebAPI zu installieren, müssen Sie dieCORS
Paket und initialisierenCORS
in den Start des web-Servers.Das Paket heißt
Microsoft.OWin.Cors
In der
WebiApiConfig.cs
setzen Sie in etwas wie:InformationsquelleAutor der Antwort pinnprophead