J'utilise Microsoft.ApsNetCore.Cors 2.2
"Accès à XMLHttpRequest à 'exampleapi.local' de l'origine 'exemple.local' a été bloqué par la stratégie CORS: Aucun en-tête 'Access-Control-Allow-Origin' n'est présent sur le demandé ressource. "
J'ai défini les paramètres avec ceci
public void ConfigureServices(IServiceCollection services) { services.AddCors(options => { options.AddPolicy("AllowSpecificOrigin", builder => { builder .AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); }); }); services.Configure<TokenSettings>(this.Configuration.GetSection("Tokens")); services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(opt => { opt.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = Configuration["Tokens:Issuer"], ValidAudience = Configuration["Tokens:Audience"], IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration["Tokens:SecurityKey"])) }; }); services.AddMvc(); services.Configure<LdapConfig>(Configuration.GetSection("ldap")); services.AddScoped<ILdapAuthenticationService, LdapAuthenticationService>(); services.AddScoped<IUserService, UserService>(); services.AddScoped<IProjectService, ProjectService>(); services.AddScoped<IProjectMembersService, ProjectMembersService>(); services.AddScoped<IJourneyUsersService, JourneyUsersService>(); services.AddScoped<IProjectRolesService, ProjectRolesService>(); services.AddScoped<IPmoGuardianService, PmoGuardianService>(); services.AddScoped<IHolidaysService, HolidaysService>(); services.AddScoped<IMailService, MailService>(); services.AddScoped<INotificationsService, NotificationsService>(); services.AddScoped<INotificationUsersService, NotificationUsersService>(); services.Configure<AWSConfigSes>(Configuration.GetSection("AWSSmtp")); services.AddDbContext<JourneyContext>(options => options.UseSqlServer(Configuration.GetConnectionString("JourneyConnection"))); services.AddDbContext<TSMContext>(options => options.UseSqlServer(Configuration.GetConnectionString("TSMConnection"))); services.AddDbContext<PmoGuardianContext>(options => options.UseSqlServer(Configuration.GetConnectionString("PmoGuardianConnection"))); } public void Configure(IApplicationBuilder app, IHostingEnvironment env, IMailService mail, INotificationsService not) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } Recurrence recurrency = Recurrence.GetInstance(not); //new TSMClockService(mail); app.UseCors("AllowSpecificOrigin"); app.UseAuthentication(); app.UseMvc(); } [Produces("application/json")] [Route("api/Mail")] [EnableCors("AllowSpecificOrigin")]
Mais cela ne fonctionne pas, j'ai toujours la même erreur
5 Réponses :
Voici l'exemple fourni ici: ASP.NET Core 2.2
public void ConfigureServices(IServiceCollection services) { services.AddCors(); } public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { app.UseCors( options => options.WithOrigins("http://example.com").AllowAnyMethod() ); app.UseMvc(); }
Enfin, utilisez-le comme ceci sur le contrôleur ou l'action:
[EnableCors("AllowSpecificOrigin")]
Aussi pour certains raison assurez-vous que app.UseCors est appelé avant app.UseMVC.
Aussi si tout ce dont vous avez besoin est CORS d'une seule origine; vous utilisez une solution plus simple sans règles:
public void ConfigureServices(IServiceCollection services) { services.AddCors(options => { options.AddPolicy("AllowSpecificOrigin", builder => builder.WithOrigins("http://example.com")); }); } public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } // Shows UseCors with named policy. app.UseCors("AllowSpecificOrigin"); app.Run(async (context) => { await context.Response.WriteAsync("Hello World!"); }); }
J'ai essayé les deux mais ça ne marche pas, de toute façon je suis reconnaissant
Amy a raison dans son commentaire. Les en-têtes CORS doivent être définis par le serveur cible, pas par le vôtre.
Vous rencontrerez souvent des problèmes avec CORS si vous essayez de vous connecter à une API sur un port différent mais en cours d'exécution localement sur la même adresse IP (un exemple le plus courant est localhost: <> essayant d'envoyer une requête ping à localhost <>, etc. ).
Si vous essayez de l'exécuter sur votre ordinateur local avec Google Chrome, vous pouvez télécharger l'extension ci-dessous qui vous permettra d'activer et de désactiver la règle CORS afin que vous puissiez tester localement: Autoriser CORS: Access-Control-Allow-Origin
Je vous remercie. Si je suis sur localhost, l'API fonctionne bien mais si je suis en production, l'API obtient l'erreur
Je sais que c'est une vieille question mais si, comme moi, vous utilisez le fichier appsettings.json pour la configuration, assurez-vous d'ajouter ceci:
"cors": { "rules": [ { "origin": "https://localhost:44379", "allow": true } ]}
Ce simple ajout a tout fait fonctionner comme par magie pour moi.
Je viens de perdre quelques minutes à essayer de comprendre pourquoi CORS ne fonctionne pas pour les requêtes de http: // localhost : 8080 que j'ai configuré selon la documentation officielle.
Eh bien, c'est parce que j'ai ajouté un «/» à la fin de l'URL. Supprimez donc votre «/» des origines autorisées.
Il y a même une note sur la documentation Microsoft à ce sujet!
Remarque: l'URL ne doit pas contenir de barre oblique (/). Si l'URL se termine par /, la comparaison retourne false et aucun en-tête n'est retourné.
Un moyen simple et facile de le faire.
Package d'installation Microsoft.AspNetCore.Cors
app.UseCors (options => options.AllowAnyOrigin ());
Les en-têtes CORS doivent être définis par le serveur cible, et non par votre serveur. Ils doivent vous donner un accès vous , et non l'inverse.
J'ai exactement le même problème avec la version 2.2
@Christian, avez-vous eu de la chance pour comprendre cela?
Pas encore, je vais essayer de faire une rétrogradation vers Cors, j'espère résoudre le problème avec ça. Et toi?? @ Capo
@ChristianHerrejon - cela peut être une photo dans le noir pour vous, mais j'ai finalement pu faire fonctionner les choses en ajoutant .. system.webServer> à ma configuration web sur mon serveur. J'ai également mis à jour notre pack d'hébergement pour le noyau v2, mais cela semble n'avoir aucun effet. J'espère que cela aidera!
@Capo je l'ai résolu, il suffit de changer le web.config
@ChristianHerrejon quel est le changement que vous avez fait?
Je ne sais pas. maintenant mon application ne fonctionne pas mais il y a 3 heures fonctionnait bien @Capo