Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7
Кроме непосредственной установки конфигурации CORS в app.UseCors, можно определять политики CORS. Политики определяют набор правил взаимодействия сервера и клиента. А чтобы задействовать нужную политику, в метод app.UseCors передается ее название:
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; namespace CorsApp { public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddCors(options => options.AddPolicy("AllowLocalhost44321", builder => builder .WithOrigins("https://localhost:44321") .AllowAnyHeader() .AllowAnyMethod()) ); } public void Configure(IApplicationBuilder app) { app.UseCors("AllowLocalhost44321"); app.Run(async (context) => { await context.Response.WriteAsync("Hello client!"); }); } } }
В метод AddCors передается делегат, который принимает объект CorsOptions - настройки CORS. У этого объекта вызывается метод AddPolicy(), который устанавливает политику. Первый параметр метода - произвольное название политики (в данном случае AllowLocalhost44321). Второй параметр - делегат, который для создания политики использует объект CorsPolicyBuilder. То есть это тот же самый объект, методы которого были рассмотрены в прошлой теме. Поэтому для него можно использовать все те же самые методы:
services.AddCors(options => options.AddPolicy("AllowLocalhost44321", builder => builder .WithOrigins("https://localhost:44321") .AllowAnyHeader() .AllowAnyMethod()) );
Чтобы применить эту политику в метод app.UseCors передается ее название:
app.UseCors("AllowLocalhost44321");
При этом можно определить набор политик и применять одну из них, меняя ее по мере необходимости:
services.AddCors(options => { options.AddPolicy("TestPolicy", builder => builder .WithOrigins("https://localhost:44321") .AllowAnyHeader() .AllowAnyMethod()); options.AddPolicy("ProductionPolicy", builder => builder .WithOrigins("http://localhost.com") .AllowAnyHeader() .AllowAnyMethod()); });