5
votes

Autoriser Cors Origin dans ASP.NET Core

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


8 commentaires

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 .. à 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


5 Réponses :


1
votes

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


1 commentaires

J'ai essayé les deux mais ça ne marche pas, de toute façon je suis reconnaissant



2
votes

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


1 commentaires

Je vous remercie. Si je suis sur localhost, l'API fonctionne bien mais si je suis en production, l'API obtient l'erreur



1
votes

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.


0 commentaires

1
votes

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é.


0 commentaires

1
votes

Un moyen simple et facile de le faire.

  1. Installer le package

Package d'installation Microsoft.AspNetCore.Cors

  1. Mettez le code ci-dessous dans le fichier startup.cs

app.UseCors (options => options.AllowAnyOrigin ());


0 commentaires