ASP.NET Core Web API 跨域CORS配置失效问题求助
解决跨域POST请求的预请求错误问题
这个问题我太熟了!这是典型的**跨域资源共享(CORS)**问题——你的JS应用跑在http://localhost:8080,API在http://localhost:8081,属于不同的源(端口不同),浏览器会自动发送一个OPTIONS预请求来验证API是否允许跨域访问,而你的ASP.NET Core API目前没有处理这个预请求,所以被浏览器拦截了。
下面是具体的解决步骤,针对ASP.NET Core Web API配置CORS:
1. 在API中注册并启用CORS服务
根据你的.NET版本,配置方式略有不同:
针对.NET 6+(顶级语句模式)
修改Program.cs文件,先注册CORS策略,再启用CORS中间件:
var builder = WebApplication.CreateBuilder(args); // 注册CORS服务,配置允许前端访问的规则 builder.Services.AddCors(options => { options.AddPolicy("AllowLocalFrontend", policy => { // 指定允许的前端源地址 policy.WithOrigins("http://localhost:8080") .AllowAnyHeader() // 允许所有请求头 .AllowAnyMethod(); // 允许所有HTTP方法(包括POST、OPTIONS) }); }); // 添加控制器服务 builder.Services.AddControllers(); var app = builder.Build(); // 重要:CORS中间件必须放在路由和控制器之前 app.UseCors("AllowLocalFrontend"); app.UseRouting(); app.MapControllers(); app.Run("http://localhost:8081");
针对旧版本.NET(Startup.cs模式)
在ConfigureServices方法中注册CORS策略:
public void ConfigureServices(IServiceCollection services) { services.AddCors(options => { options.AddPolicy("AllowLocalFrontend", policy => { policy.WithOrigins("http://localhost:8080") .AllowAnyHeader() .AllowAnyMethod(); }); }); services.AddControllers(); }
然后在Configure方法中启用CORS中间件(注意顺序,要放在路由之前):
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 其他中间件(如UseHttpsRedirection) app.UseCors("AllowLocalFrontend"); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
2. 验证修复效果
重启你的ASP.NET Core API服务,然后从http://localhost:8080的JS应用重新发送POST请求,应该就能正常获取API的响应了。
如果还是有问题,可以检查这几点:
- 确认
UseCors中间件的顺序是否正确,必须在UseRouting和控制器映射之前 - 确认
WithOrigins里的地址和你的前端地址完全一致(包括HTTP协议、端口号) - 如果需要允许多个前端源,可以用逗号分隔,比如
WithOrigins("http://localhost:8080", "http://localhost:3000")
额外说明:为什么Fiddler能正常访问?
因为Fiddler是直接发送HTTP请求,不受浏览器的同源策略限制,所以能正常调用API,但浏览器会严格执行CORS规则,必须API端明确允许跨域才能通过。
内容的提问来源于stack exchange,提问作者Tom Troughton
相关产品推荐
相关产品推荐

