Разрешить Cors Origin в ASP.NET Core - PullRequest
0 голосов
/ 11 января 2019

Я использую Microsoft.ApsNetCore.Cors 2.2

"Доступ к XMLHttpRequest по адресу" exampleapi.local " из источника 'example.local' был заблокирован политикой CORS: Заголовок «Access-Control-Allow-Origin» отсутствует в запрошенном ресурс ".

Я установил настройки с помощью этого

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")]

Но это не работает, всегда я получаю одну и ту же ошибку

Ответы [ 3 ]

0 голосов
/ 11 января 2019

Эми права в своем комментарии. Заголовки CORS должны быть установлены целевым сервером, а не вашим.

Часто возникают проблемы с CORS, если вы пытаетесь подключить API к другому порту, но работаете локально на том же IP-адресе (наиболее распространенный пример - localhost: <> пытается пропинговать localhost <> и т. Д. ).

Если вы пытаетесь запустить это на своем локальном компьютере с Google Chrome, вы можете загрузить нижеприведенное расширение, которое позволит вам включать и выключать правило CORS, чтобы вы могли проводить локальные тесты: Разрешить CORS: Контроль доступа-Разрешить происхождение

0 голосов
/ 25 июля 2019

Я знаю, что это старый вопрос, но если вы, как и я, используете файл appsettings.json для конфигурации, обязательно добавьте следующее:

 "cors": {
"rules": [
  {
    "origin": "https://localhost:44379",
    "allow": true
  }
]}

Это простое дополнение заставило все волшебно работать на меня.

0 голосов
/ 11 января 2019

Вот пример, приведенный здесь: ASP.NET Core 2.2

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

Наконец, используйте его на контроллере или в действии:

[EnableCors("AllowSpecificOrigin")]

Также по какой-то причине убедитесь, что app.UseCors вызывается перед app.UseMVC.

Также, если вам нужно только CORS из одного источника; Вы используете более простое решение без политик:

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...