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!
Je l'ai résolu en ajoutant les lignes suivantes à web.config.
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
</modules>
</system.webServer>
Merci.
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.
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é