.NET 6 Core API如何从appsettings.json配置多源CORS?
.NET 6 Core API 便捷管理多前端CORS配置的方法
方法一:直接读取逗号分隔的配置(快速实现)
先在appsettings.json(或对应环境的配置文件,如appsettings.Production.json)中配置逗号分隔的前端地址:
{ "AllowedOrigins": "https://frontend1.com,https://frontend2.com,https://localhost:3000" }
然后在Program.cs中读取并配置CORS:
var builder = WebApplication.CreateBuilder(args); // 读取配置并处理分割,自动去除空项和首尾空格 var allowedOrigins = builder.Configuration["AllowedOrigins"]? .Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries) ?? Array.Empty<string>(); builder.Services.AddCors(options => { options.AddPolicy("AllowMultipleOrigins", policy => { policy.WithOrigins(allowedOrigins) .AllowAnyHeader() .AllowAnyMethod(); // 若需要允许带凭证的请求,添加 .AllowCredentials() }); }); // 注意:CORS中间件必须放在路由、授权等中间件之前 var app = builder.Build(); app.UseCors("AllowMultipleOrigins"); // 后续中间件配置(如app.UseAuthorization()、app.MapControllers()等) app.Run();
方法二:强类型配置绑定(生产环境推荐)
这种方式更规范,支持配置验证,也避免逗号分割的潜在问题:
- 创建配置类:
public class CorsSettings { public List<string> AllowedOrigins { get; set; } = new List<string>(); }
- 修改
appsettings.json为数组格式:
{ "CorsSettings": { "AllowedOrigins": [ "https://frontend1.com", "https://frontend2.com", "https://localhost:3000" ] } }
- 在
Program.cs中绑定配置并设置CORS:
var builder = WebApplication.CreateBuilder(args); // 绑定配置到强类型类 var corsSettings = builder.Configuration.GetSection("CorsSettings") .Get<CorsSettings>() ?? new CorsSettings(); builder.Services.AddCors(options => { options.AddPolicy("AllowMultipleOrigins", policy => { policy.WithOrigins(corsSettings.AllowedOrigins.ToArray()) .AllowAnyHeader() .AllowAnyMethod(); }); }); // 可选:将配置类注册到DI容器,方便其他服务使用 builder.Services.Configure<CorsSettings>(builder.Configuration.GetSection("CorsSettings")); var app = builder.Build(); app.UseCors("AllowMultipleOrigins"); // 后续中间件配置 app.Run();
关键注意事项
- 前端地址必须完整包含
http://或https://,仅写域名会导致CORS策略不生效 - 生产环境可通过环境变量覆盖配置(如Docker环境变量、云服务配置项),无需修改配置文件
- 若需动态更新CORS源(不重启服务),可自定义
ICorsPolicyProvider实现,但常规场景上述两种方法足够满足需求
内容的提问来源于stack exchange,提问作者Urgazhi
相关产品推荐
相关产品推荐

