web-dev-qa-db-fra.com

La réponse à la demande de contrôle en amont ne s'est pas vérifiée au contrôle d'accès (Angular2)

Je reçois une erreur ci-dessous lors de l'appel de REST API Web dans Asp.net.

XMLHttpRequest ne peut pas charger http: // localhost: 54859/api/PostData . La réponse à la demande de contrôle en amont ne réussit pas la vérification du contrôle d'accès: aucun en-tête 'Access-Control-Allow-Origin' n'est présent sur la ressource demandée. Origin ' http: // localhost: 3000 ' n'est donc pas autorisé à accéder.

J'utilise Angular2 comme front-end. Dans le back-end, j'ai ajouté les codes suivants pour activer CORS dans l'API WEB.

 var corsAttr = new EnableCorsAttribute("*", "*", "*");
 config.EnableCors(corsAttr);

Tout fonctionne bien pour la requête Http, mais pas pour la requête Http Post.

Toute aide serait appréciable 

Merci d'avance!

6

Je l'ai résolu en ajoutant les lignes suivantes à web.config.

<system.webServer>
   <modules runAllManagedModulesForAllRequests="true">
   </modules>
</system.webServer>

Merci.

10

L'ajout de l'en-tête Access-Control-Allow-Origin pour la demande de contrôle en amont lors de Application_BeginRequest dans Global.asax.cs a fonctionné pour moi. 

Global.asax/Global.asax.cs

protected void Application_BeginRequest(Object sender, EventArgs e)
    {
        // Preflight request comes with HttpMethod OPTIONS
        if (HttpContext.Current.Request.HttpMethod == "OPTIONS")            
        {
            HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache");
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");               
            // The following line solves the error message
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
            // If any http headers are shown in preflight error in browser console add them below
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept, Pragma, Cache-Control, Authorization ");
            HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
            HttpContext.Current.Response.End();
        }
    }

Après avoir résolu ce problème, l’application a généré des erreurs sur la console du navigateur, faisant que certains en-têtes ne sont pas mentionnés dans la réponse de contrôle en amont.

Une fois les en-têtes ajoutés à l'en-tête Access-Control-Allow-Headers de la réponse de contrôle en amont, le problème a été résolu.

7
Nikhil Nambiar
protected void Application_BeginRequest(Object sender, EventArgs e)
{
    // Preflight request comes with HttpMethod OPTIONS
        // The following line solves the error message
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
    if (HttpContext.Current.Request.HttpMethod == "OPTIONS")            
    {
        HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache");
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");               
        // If any http headers are shown in preflight error in browser console add them below
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept, Pragma, Cache-Control, Authorization ");
        HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
        HttpContext.Current.Response.End();
    }
}

Ce code ci-dessus a bien fonctionné

0
Atik Fahm