在 ASP.NET 网站研发中,跨域问题(CORS,Cross-Origin Resource Sharing)是由于浏览器的同源策略限制导致的 —— 当前端页面(如http://localhost:3000)请求不同协议、域名、端口的后端接口(如http://localhost:5000)时,浏览器会拦截请求并抛出跨域错误。以下是 ASP.NET (含 Framework 和 Core)中最常用、最规范的跨域解决方案,按优先级和实用性排序:
一、核心概念:先明确跨域的触发条件
跨域请求需同时满足以下 3 点(缺一不可):
浏览器会先发送OPTIONS 预检请求(复杂请求,如 POST 带 JSON 数据、自定义请求头),验证后端是否允许跨域;简单请求(如 GET 无自定义头)直接发送,但仍受同源策略限制。
二、ASP.NET Core (推荐,.NET Core 2.0+)
ASP.NET Core 内置了 CORS 中间件,配置容易且灵活,是首选方案。
步骤 1:安装依赖(默认已含有,无需额外安装)
Microsoft.AspNetCore.Cors 是 Core 框架自带的,只需在 Startup.cs 或 Program.cs 中配置即可。
步骤 2:安装 CORS 策略(两种写法:Program.cs/ Startup.cs)
方式 1:.NET 6+ (Program.cs 顶级语句)
var builder = WebApplication.CreateBuilder(args);
// 1. 添加 CORS 服务,并定义策略(PolicyName 自定义,如 "AllowAll" 或 "SpecificOrigins")
builder.Services.AddCors(options =>
{
options.AddPolicy("AllowAll", policy =>
{
// 允许所有源(开发环境可用,生产环境不推荐)
policy.AllowAnyOrigin()
.AllowAnyMethod() // 允许所有 HTTP 方法(GET/POST/PUT/DELETE 等)
.AllowAnyHeader(); // 允许所有请求头
});
// 生产环境推荐:仅允许指定源(精准授权)
options.AddPolicy("SpecificOrigins", policy =>
{
policy.WithOrigins("http://localhost:3000", "https://your-frontend-domain.com") // 允许的前端域名(不带 /)
.AllowMethods("GET", "POST", "PUT") // 仅允许指定方法
.AllowHeaders("Content-Type", "Authorization") // 仅允许指定请求头
.AllowCredentials(); // 允许携带 Cookie(如需跨域传递身份凭证)
});
});
// 其他服务注册(如 AddControllers、AddDbContext 等)
builder.Services.AddControllers();
var app = builder.Build();
// 2. 启用 CORS 中间件(必须放在 UseRouting 之后、UseAuthorization 之前!)
app.UseCors("SpecificOrigins"); // 指定使用的策略名称
// 其他中间件(如 UseRouting、UseAuthorization、Ma
浙公网安备 33010602011771号