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 может быть перезаписана на основе контроллера или действия, но это может установить значение по умолчанию для всего приложения.