Поиск…


замечания

Защита браузера запрещает веб-странице делать запросы AJAX в другом домене. Это ограничение называется политикой одного и того же происхождения и не позволяет злоумышленнику считывать конфиденциальные данные с другого сайта. Однако иногда вы можете захотеть, чтобы другие сайты отправляли запросы на кросс-начало в ваше веб-приложение.

Совместное использование ресурсов (CORS) - это стандарт W3C, который позволяет серверу смягчать политику одного и того же происхождения. Используя CORS, сервер может явно разрешать некоторые запросы с кросс-началом, отвергая других. CORS более безопасен и более гибким, чем предыдущие методы, такие как JSONP.

Включить CORS для всех запросов

Используйте метод расширения UseCors() в IApplicationBuilder в методе Configure для применения политики CORS ко всем запросам.

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddCors();
}

public void Configure(IApplicationBuilder app)
{
    // Other middleware..

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

    // Other middleware..

    app.UseMvc();
}

Включить политику CORS для определенных контроллеров

Чтобы включить определенную политику CORS для определенных контроллеров, вам необходимо создать политику в расширении AddCors в методе ConfigureServices :

services.AddCors(cors => cors.AddPolicy("AllowAll", policy =>
{
    policy.AllowAnyOrigin()
            .AllowAnyMethod()
            .AllowAnyHeader();
}));

Это позволяет применить политику к контроллеру:

[EnableCors("AllowAll")]
public class HomeController : Controller
{
   // ...
}

Более сложная политика CORS

Конструктор политик позволяет создавать сложные политики.

app.UseCors(builder =>
{
    builder.WithOrigins("http://localhost:5000", "http://myproductionapp.com")
           .WithMethods("GET", "POST", "HEAD")
           .WithHeaders("accept", "content-type", "origin")
           .SetPreflightMaxAge(TimeSpan.FromDays(7));
});

Эта политика разрешает только источники http://localhost:5000 и http://myproductionapp.com только с помощью методов GET , POST и HEAD и принимает только заголовки HTTP-адреса accept , content-type и origin . Метод SetPreflightMaxAge заставляет браузеры кэшировать результат запроса предварительной проверки ( OPTIONS ) для кэширования в течение указанного времени.

Включить политику CORS для всех контроллеров

Чтобы включить политику CORS во всех ваших MVC-контроллерах, вам необходимо создать политику в расширении AddCors в методе ConfigureServices, а затем установить политику на CorsAuthorizationFilterFactory

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Cors.Internal;
...
public void ConfigureServices(IServiceCollection services) {
    // Add AllowAll policy just like in single controller example.
    services.AddCors(options => {
        options.AddPolicy("AllowAll",
           builder => {
                builder.AllowAnyOrigin()
                       .AllowAnyMethod()
                       .AllowAnyHeader();
        });
    });

    // Add framework services.
    services.AddMvc();

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

public void Configure(IApplicationBuilder app) {
    app.useMvc();
    // For content not managed within MVC. You may want to set the Cors middleware
    // to use the same policy.
    app.UseCors("AllowAll");
}

Эта политика CORS может быть перезаписана на основе контроллера или действия, но это может установить значение по умолчанию для всего приложения.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow