1
votes

L'erreur CORS continue de se produire même après son activation, avec .NET Core et Angular Client

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.

 entrez la description de l'image ici

Et je peux voir les en-têtes comme dans:

 entrez la description de l'image ici

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());
});


2 commentaires

pouvez-vous afficher votre code de méthode Configure () dans Startup.cs?


@Bob a mis à jour la question: Utilisation de .net Core 3.0


3 Réponses :


1
votes

é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


3 commentaires

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.



1
votes
[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.

3 commentaires

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



3
votes

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");
    });
}


0 commentaires