Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7
Если мы используем в приложении для создания системы маршрутизации метод app.UseEndpoints()
,
то мы можем для каждого маршрута указать свои настройки CORS. Таким образом, мы можем установить глобально для всех ресурсов одни и те же настройки
CORS, либо конкретизировать для каждого ресурса свои настройки.
В прошлых темах использовалась глобальная настройка CORS, которая предполагает, что настройки 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(); // добавляем сервисы CORS } public void Configure(IApplicationBuilder app) { app.UseDeveloperExceptionPage(); app.UseRouting(); // глобальная настройка CORS для всех ресурсов app.UseCors(builder => builder.AllowAnyOrigin()); app.UseEndpoints(endpoints => { endpoints.MapGet("/", async context => { await context.Response.WriteAsync("Hello World!"); }); endpoints.MapGet("/home", async context => { await context.Response.WriteAsync("Home Page!"); }); }); } } }
С помощью метода RequireCors() у объекта IEndpointConventionBuuilder мы можем установить настройки CORS для каждого конкретного маршрута. Данный метод в качестве параметра принимает либо название политики CORS, либо делегат с параметром CorsPolicyBuilder, с помощью который устанавливается конфигурацию CORS.
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("AllowTestSite", builder => builder .WithOrigins("https://localhost:44321") .AllowAnyHeader() .AllowAnyMethod()); options.AddPolicy("AllowNormSite", builder => builder .WithOrigins("https://localhost.com") .AllowAnyHeader() .AllowAnyMethod()); }); } public void Configure(IApplicationBuilder app) { app.UseDeveloperExceptionPage(); app.UseRouting(); app.UseCors(); app.UseEndpoints(endpoints => { endpoints.MapGet("/", async context => { await context.Response.WriteAsync("Hello World!"); }).RequireCors(options => options.AllowAnyOrigin()); endpoints.MapGet("/home", async context => { await context.Response.WriteAsync("Home Page!"); }).RequireCors("AllowNormSite"); endpoints.MapGet("/about", async context => { await context.Response.WriteAsync("About Page!"); }).RequireCors("AllowTestSite"); }); } } }
Таким образом, мы можем определить для каждого свою конфигурацию CORS.