Как включить CORS в ядре ASP.NET

Я пытаюсь разрешить совместное использование ресурсов перекрестного происхождения в моем ASP.NET Core Web API, но я застрял.

Атрибут EnableCors принимает policyName типа string как параметр:

// Summary:
//     Creates a new instance of the Microsoft.AspNetCore.Cors.Core.EnableCorsAttribute.
//
// Parameters:
//   policyName:
//     The name of the policy to be applied.
public EnableCorsAttribute(string policyName);

Что означает policyName и как я могу настроить CORS в базовом веб-API ASP.NET?

+144
11 авг. '15 в 12:37
источник поделиться
7 ответов

Вы должны настроить политику CORS при запуске приложения в методе ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
    {
        builder.AllowAnyOrigin()
               .AllowAnyMethod()
               .AllowAnyHeader();
    }));

    // ...
}

CorsPolicyBuilder в builder позволяет вам настроить политику в соответствии с вашими потребностями. Теперь вы можете использовать это имя для применения политики к контроллерам и действиям:

[EnableCors("MyPolicy")]

Или примените его к каждому запросу:

public void Configure(IApplicationBuilder app)
{
    app.UseCors("MyPolicy");

    // ...
}
+245
11 авг. '15 в 12:42
источник

При использовании .Net-Core 1.1

К сожалению, документы в этом конкретном случае очень запутаны. Так что я сделаю это очень просто:

  • Добавьте пакет Nuget Microsoft.AspNetCore.Cors в свой проект
  • В методе ConfigureServices добавьте services.AddCors();
  • В методе Configure перед вызовом app.UseMvc() и app.UseStaticFiles() добавьте:

    app.UseCors(builder => builder
        .AllowAnyOrigin()
        .AllowAnyMethod()
        .AllowAnyHeader()
        .AllowCredentials());
    

Это. Каждый клиент имеет доступ к вашему основному веб-сайту/API ASP.NET.


При использовании .Net-Core 2.0

  • Добавьте пакет Nuget Microsoft.AspNetCore.Cors в свой проект
  • в методе ConfigureServices перед вызовом services.AddMvc() добавьте:

     services.AddCors(options =>
        {
            options.AddPolicy("AllowAll",
                builder =>
                {
                    builder
                    .AllowAnyOrigin() 
                    .AllowAnyMethod()
                    .AllowAnyHeader()
                    .AllowCredentials();
                });
        });
    
  • (Важно) В методе Configure перед вызовом app.UseMvc() добавьте app.UseCors("AllowAll");

    AllowAll - это имя политики, которое мы должны упомянуть в app.UserCors. Это может быть любое имя.

+90
09 апр. '17 в 5:00
источник
другие ответы

Связанные вопросы


Похожие вопросы

Основываясь на ответе Henk, я смог найти конкретный домен, метод, который я хочу разрешить, а также заголовок, который я хочу включить CORS для:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
         options.AddPolicy("AllowSpecific", p => p.WithOrigins("http://localhost:1233")
                                                   .WithMethods("GET")
                                                   .WithHeaders("name")));
    services.AddMvc();
}

использование:

[EnableCors("AllowSpecific")]
+36
11 авг. '15 в 12:57
источник

В частности, в dotnet core 2.2 с SignalR вы должны изменить

.WithOrigins("http://localhost:3000") или

.SetIsOriginAllowed(isOriginAllowed: _ => true)//for all origins

вместо этого .AllowAnyOrigin() с .AllowCredentials()

https://trailheadtechnology.com/breaking-change-in-aspnetcore-2-2-for-signalr-and-cors/

https://github.com/aspnet/AspNetCore/issues/4483

+5
12 апр. '19 в 20:34
источник

Вы должны настроить в классе Startup.cs

services.AddCors(options =>
        {
            options.AddPolicy("CorsPolicy",
                builder => builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader()
                .AllowCredentials());
        });
+4
12 окт. '18 в 8:05
источник

`

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCors(options =>
        {
            options.AddPolicy("AllowAnyOrigin",
                builder => builder
                .AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader());
        });

        services.Configure<MvcOptions>(options => {
            options.Filters.Add(new CorsAuthorizationFilterFactory("AllowAnyOrigin"));
        });            
    }

`

+3
25 нояб. '17 в 19:26
источник

Если вы размещаете на IIS, одна из возможных причин заключается в том, что вы получаете это потому, что IIS блокирует глагол OPTIONS. Из-за этого я провел почти час:

Один контрольный сигнал - вы получаете ошибку 404 во время запроса OPTIONS.

Чтобы исправить это, вам необходимо явно указать IIS не блокировать запрос OPTIONS.

Перейти к фильтрации запросов:

IIS Request Filtering

Убедитесь, что разрешены опции:

Make sure OPTIONS is True

Или просто создайте web.config со следующей настройкой:

<system.webServer>
    <security>
        <requestFiltering>
            <verbs>
                <remove verb="OPTIONS" />
                <add verb="OPTIONS" allowed="true" />
            </verbs>
        </requestFiltering>
    </security>
</system.webServer>
+3
13 нояб. '18 в 11:47
источник

Посмотрите другие вопросы по меткам или Задайте вопрос