asp.net-core                
            Запросы перекрестного происхождения (CORS)
        
        
            
    Поиск…
замечания
Защита браузера запрещает веб-странице делать запросы 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 может быть перезаписана на основе контроллера или действия, но это может установить значение по умолчанию для всего приложения.