J'ai développé l'application .Net Core MVC (angulaire) et l'application Api principale .net
Dans les deux applications, j'ai activé CORS à la fois dans l'application Web et dans l'api
.Net Core
Access to XMLHttpRequest at 'http://etestservice.qa.com:5003/QA/api/test/GetDetails?email=abc@gmail.com' from origin 'http://etestweb.qa.com::5002' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource
Pour tous les Get et Post, ajoutez les en-têtes comme ci-dessous
XXX
Toujours confronté à l'erreur CORS
get(url: string, options?: any) { let headers = new Headers(); headers.append('Content-Type', 'application/x-www-form-urlencoded'); headers.append('Access-Control-Allow-Origin', '*'); headers.append('Accept', 'applcation/ json'); options = { headers: headers }; const _url = this.webapiurl + url; return this.http.get(_url, options); }
4 Réponses :
Dans le fichier startup.cs
[EnableCors("AllowSpecificOrigin")] public class Controller { // code... }
Dans l'API,
public void ConfigureServices(IServiceCollection services) { services.AddMvc(); // app settings configuration. services.AddCors(options => { // this defines a CORS policy called "default" options.AddPolicy("AllowSpecificOrigin", policy => { var corsUrlSection = Configuration.GetSection("AllowedOrigins"); var corsUrls = corsUrlSection.Get<string[]>(); policy.WithOrigins(corsUrls) .AllowAnyHeader() .WithExposedHeaders("X-Pagination") // add any customer header if we are planning to send any .AllowAnyMethod(); }); }); } public void Configure(IApplicationBuilder app, IHostingEnvironment environment, ILoggerFactory loggerFactory) { app.UseExceptionMiddleware(); // Use HTTPS Redirection Middleware to redirect HTTP requests to HTTPS. app.UseHttpsRedirection(); app.UseCors("AllowSpecificOrigin"); app.UseMvc(); }
L'ordre des composants Middleware est un must. Alors vérifiez-le. J'ai joint ici mon code de projet.
Ajoutez l'attribut [EnableCors ("CorsPolicy")]
au-dessus de votre contrôleur
Reportez-vous également à Comment activer CORS dans ASP.NET Core < / a>
Mon fichier startup.cs:
[Route("api/[controller]")] [ApiController] [EnableCors("MyPolicy")] public class controllerName : ControllerBase { // class boby }
Et vous devez activer les cors dans votre classe de contrôleur comme suit.
services.AddCors(o => o.AddPolicy("MyPolicy", builder => { builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); })); //In configure app.UseHttpsRedirection(); app.UseMvc(); app.UseCors("MyPolicy");
Il est probable que l'API Web ne gère pas correctement la demande de contrôle en amont (HTTP VERB - OPTIONS). Le
Microsoft.AspNetCore.Cors
vous permettra de faire CORS avec des fonctionnalités intégrées, mais il ne gère pas la requête OPTIONS. La meilleure solution de contournement à ce jour est de créer un nouveau middleware, comme suggéré dans un article précédent. Vérifiez la réponse marquée comme correcte dans le message suivant:
vous devez appeler
app.UseCors ("CorsPolicy");
avantapp.UseMvc ();
et autres appelsapp.Use ...
vous n'avez pas besoin de l'en-tête
headers.append ('Access-Control-Allow-Origin', '*');
sur le client ... vous devriez le recevoir dans le cadre de la réponse du serveurLes erreurs CORS peuvent être notoirement «faussement positives». En d'autres termes, vous obtenez une exception dans le code de votre serveur - mais dans le navigateur, cela apparaît comme une erreur CORS. Vérifiez le fichier journal de votre serveur pour les exceptions! Jetez également un œil dans l'onglet Réseau F12 - qu'obtenez-vous dans l'appel API?