J'ai un projet d'API Web .net Core 3.0 où j'ai activé le CORS comme indiqué:
ConfigureService
public void ConfigureServices(IServiceCollection services) { services.AddControllers(); services.AddDbContext<LabSoftwareContext>(options => options.UseSqlServer(Configuration.GetConnectionString("LabDatabase"))); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Version = "v1", Title = "Lab API", Description = "Lab Software APIs" }); }); services.Configure<IISServerOptions>(options => { options.AutomaticAuthentication = false; }); services.AddCors(options => { options.AddPolicy("AllowOrigin", builder => builder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod()); }); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseCors("AllowOrigin"); app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "Lab Software API"); }); }
Et dans Configure method
app.UseCors ();
Et chaque fois que j'appelle ce point final en utilisant httpclient depuis l'application angulaire, j'obtiens une erreur CORS.
Et je peux voir les en-têtes comme dans:
Je pensais que l'ajout du CORS dans mon démarrage aurait dû résoudre ce problème.
MISE À JOUR:
Ajout du code de service de configuration et de configuration:
services.AddCors(options => { options.AddPolicy("AllowOrigin", builder => builder.AllowAnyOrigin()); });
3 Réponses :
écrivez-les à la fin de la méthode Configure
app.UseCors(x=>x.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()); app.UseAuthentication();app.UseMvc();
changez également https en http
Pas de chance, toujours cette erreur: L'accès à XMLHttpRequest à 'https: // localhost: 44378 / api / UserMaster / 1' à partir de l'origine 'http: // localhost: 4200' a été bloqué par la stratégie CORS: réponse à La demande de contrôle en amont ne passe pas le contrôle d'accès: aucun en-tête "Access-Control-Allow-Origin" n'est présent sur la ressource demandée.
N'utilisez pas https, utilisez http
C'est une suggestion vraiment dangereuse - et même si cela ne vous convainc pas, une fois que vous publiez votre application, vous constaterez que votre site est signalé comme non sécurisé par Chrome et Firefox.
[EnableCors("your_policy")] public class BaseController : apiController One thing that worked for me was to that despite putting on the Configure method was that i needed to specify the CORS in the controllers.
Malheureusement, cela n'a pas aidé: dès que j'ajoute que j'obtiens cette erreur:
System.InvalidOperationException: Endpoint LabSoftware.Controllers.UserMasterController.GetUserMaster (LabSoftware) contient des métadonnées CORS, mais aucun middleware n'a été trouvé prenant en charge CORS. Configurez le démarrage de votre application en ajoutant app.UseCors () à l'intérieur de l'appel à Configure (..) dans le code de démarrage de l'application.
utilisez-vous app.UserCors ()
et définissez-vous un nom pour la stratégie? Sinon, vous avez la politique par défaut, utilisez [EnableCors]
sans aucun argument
Je pense que la cause première de ceci est l'ordre de votre middleware dans Configure ()
- si l'ordre est incorrect, cela peut provoquer des pannes Cors inattendues.
par exemple Je pense que UseCors ()
devra peut-être être placé après UseHttpsRedirection()
Il y a un tableau (complexe!) Expliquant la commande du middleware ici: https: / /docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/?view=aspnetcore-3.1#built-in-middleware
Votre code modifié selon l'exemple de la même page:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseRouting(); app.UseCors(); app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "Lab Software API"); }); }
pouvez-vous afficher votre code de méthode Configure () dans Startup.cs?
@Bob a mis à jour la question: Utilisation de .net Core 3.0