Angular2-Réponse à la demande de contrôle en amont ne passent pas de contrôle d'accès: Pas de "Access-Control-Allow-Origin' en-tête est présent sur la ressource demandée
Je vais appeler un http post Angulaire 2. Cela fonctionne bien dans l'homme post mais quand j'mettre en œuvre cet appel d'API Angulaire 2 je n'ai Pas de 'Access-Control-Allow' erreur. Voici mon code
getInspections(): Observable<IInspection[]> {
if (!this.inspections) {
let body =JSON.stringify({"Statuses":["Submitted", "Opened"]});
let headers = new Headers({ 'Content-Type': 'application/json' });
headers.append('Access-Control-Allow-Origin','*');
let options = new RequestOptions({ headers: headers });
return this.http.post(this._baseUrl + '/api/Inspect/ListI',body,options)
.map((res: Response) => {
this.inspections = res.json();
return this.inspections;
})
.catch(this.handleError);
}
else {
//return cached data
return this.createObservable(this.inspections);
}
}
Ou puis-je le faire? Il suffit de passer en-tête à la place des options
getInspections(): Observable<IInspection[]> {
if (!this.inspections) {
let body =JSON.stringify({"Statuses":["Submitted", "Opened"]});
let headers = new Headers({ 'Content-Type': 'application/json' });
//headers.append('Access-Control-Allow-Origin','*');
// let options = new RequestOptions({ headers:headers });
return this.http.post(this._baseUrl + '/api/Inspect/ListI',body,headers)
.map((res: Response) => {
this.inspections = res.json();
return this.inspections;
})
.catch(this.handleError);
}
else {
//return cached data
return this.createObservable(this.inspections);
}
}
Vous pouvez passer en-têtes directement (je suppose que ça doit être un objet comme
{headers}
(pas sûr), mais ce n'est pas lié à votre SCRO erreur.OriginalL'auteur raj kumar | 2016-08-17
Vous devez vous connecter pour publier un commentaire.
De la SCRO en-têtes comme
doivent être fournis par le serveur. De les ajouter sur le client est inutile.
C'est probablement ce qui signifie que le propriétaire ne voulez xou à l'utilisation de l'API de cette façon. Vous pouvez contourner ce problème en relayant les demandes par l'intermédiaire d'un serveur de contrôle. La SCRO-nous uniquement pour les demandes faites à partir d'un navigateur, et non pas à partir d'un serveur.
OriginalL'auteur Günter Zöchbauer
Lorsque vous utilisez des en-têtes standard (json est apparemment considéré comme non-standard), puis une visite pré-vol est effectué à se demander si l'action demandée (dans ce cas, 'post') peut être réalisée. Seul le serveur peut répondre permissif en-têtes. Comment vous répondre dépend de votre serveur de langue. Dans mon webapi2 j'en œuvre de la scro dans le WebAppConfig
Note pour un serveur en ligne vous devez remplacer le localhost réf web configed liste ( ou d'un emplacement spécifique où l'appelant réside). Le SupportsCredentials n'est nécessaire que si vous utilisez l'authentification.
Pour gérer la pré-vol, j'ai ajouté une méthode pour Globals.asax qui intercepte juste avant le vol des messages et des retours assez de données pour le poste à aller de l'avant.
Remarque ici que je suis tricher un peu en reflétant l'origine remonte - ce n'est pas en sécurité dans un environnement de production et devrait dresser la liste des serveurs spécifiques sinon vous êtes trop lâche avec la sécurité.
Être conscient qu'il ya des dev tricheurs. - Si vous exécutez internet explorer sur localhost (pour dev fins) ie ignore le port de la plupart des autres navigateurs ne sont pas afin de rendre les choses plus facile. Il y a également une amélioration de la SCRO pour google Chrome qui ajoute les en-têtes pour vous. Enfin, vous verrez beaucoup de code qui utilise un " * " les retours (pour permettre à tous) - par tous les moyens de les utiliser pour obtenir le code de travail, mais avant la libération de verrouillage de ces vers le bas beaucoup plus agressive.
Only the server can respond with the permissive headers.
Et plus tardThere is also a CORS enhancement for Chrome which adds the headers for you.
Chrome est sur le côté client non?recommandons que vous étudiez ce que le Chrome de la SCRO amélioration ne qui devrait effacer votre confusion. Cette amélioration peut résoudre un problème plus limité dans un environnement de DEV. La réponse complète est nécessaire pour la production.
OriginalL'auteur Matrim