2017-10-02 2 views
0

J'essaie de comprendre ce qui cause les problèmes entre mes applications angulaires et MVC Web API application.CORS erreurs sur demande PUT entre Angular 4 app et MVC WebAPI

Dans mes webapiconfig.cs j'InterActions pour CORS comme suit:

var corsAttr = new EnableCorsAttribute("http://localhost:4200,http://domain1,http://domain2", "*", "*"); 
corsAttr.SupportsCredentials = true; 

// Enable CORS Globally 
config.EnableCors(corsAttr); 

J'interprète la demande PUT en utilisant quelque chose comme:

updateExchange(exchange: IOrder): Observable<IOrder> { 
    return this._http.put<IOrder>(this._orderServiceUrl + '/' + order.Id, order) 
    .do(this.handleSuccessResponse) 
    .catch(this.handleErrorResponse); 
} 

Je ne suis pas vraiment sûr si cette question est importante, mais dans mon demandes Je renvoie parfois différents codes d'état en fonction de l'erreur.

Response to preflight request doesn't pass access control check: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. Origin ' http://localhost:4200 ' is therefore not allowed access. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.

Je reviens une réponse positive, mais dans les en-têtes de réponse, je ne vois pas les en-têtes CORS:

Cache-Control:private 
    Date:Mon, 02 Oct 2017 15:37:31 GMT 
    Server:Microsoft-IIS/10.0 
    Transfer-Encoding:chunked 
    X-AspNet-Version:4.0.30319 
    X-Powered-By:ASP.NET 
    X-SourceFiles:=?UTF-8?<something> 

Toute suggestion sur ce que dois-je faire pour obtenir ce travail?

Répondre

1

La réponse ne doit contenir que les en-têtes acceptés dans Access-Control-Allow-Headers, n'utilisez pas de caractères génériques. Il y a des problèmes de sécurité à cet égard, et c'est pourquoi vous obtenez l'erreur.

référez-vous à la réponse en this post pour plus d'informations sur les raisons pour lesquelles ceci est une mauvaise pratique. C'est un message angular.js, mais l'aspect CORS s'applique

+0

La raison pour laquelle j'ai un caractère générique là-bas est b/c sinon je reçois une erreur: le serveur ne peut pas définir le statut après l'envoi des en-têtes HTTP. – AlexanderM

+0

Btw, à partir de la documentation jointe à l'une des réponses, je ne vois que l'inquiétude pour les origines, maintenant en-têtes. D'une manière ou d'une autre, le problème ici est que les en-têtes de réponse n'ont aucun en-tête, même si tout est spécifié selon la documentation MS (ou il me manque quelque chose). – AlexanderM

+0

très bien, hmmm. bien que cela ne peut pas être correct, pourriez-vous poster plus de votre code peut-être? avez-vous jeté un oeil à ce poste, https://stackoverflow.com/questions/29709477/server-cannot-set-status-after-http-headers-have-been-sent-web-api-cors – FussinHussin