ASP.NET Core配置CORS后POST请求仍遇跨域错误求助
解决CORS策略错误的方案
1. 修正中间件执行顺序
ASP.NET Core中间件的执行顺序直接影响功能生效与否,UseCors必须放在UseAuthorization和MapControllers之前,且要在UseStaticFiles之后。调整你的Program.cs代码中的中间件顺序:
using Microsoft.AspNetCore.HttpOverrides; var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers().AddNewtonsoftJson(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // 配置CORS默认策略 builder.Services.AddCors(options => { options.AddDefaultPolicy( builder => { builder.WithOrigins("http://127.0.0.1:5500") .AllowAnyHeader() .AllowAnyMethod(); }); }); builder.WebHost.UseUrls("http://*:5000"); var app = builder.Build(); // 转发头中间件需放在最靠前位置 app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto }); // 静态文件处理中间件 app.UseStaticFiles(); // CORS中间件:必须在授权和路由映射之前 app.UseCors(); app.UseAuthorization(); app.MapControllers(); app.Run();
2. 显式启用CORS策略(可选)
如果调整顺序后仍未生效,可以在控制器或特定Action上添加[EnableCors]属性,强制启用默认CORS策略:
[ApiController] [Route("[controller]")] [EnableCors] // 绑定默认CORS策略 public class BookingController : ControllerBase { [HttpPost("CreateBooking")] public IActionResult CreateBooking([FromBody] BookingModel model) { // 业务逻辑实现 return Ok(); } }
3. 排查其他潜在问题
- 确认服务器端口为5000,前端请求的地址
http://127.0.0.1:5000/CreateBooking没有拼写错误。 - 若使用反向代理(如Nginx),需确保代理服务器正确传递CORS响应头。
- 避免同时使用
WithOrigins("*")和AllowCredentials()(当前场景未用到后者,后续若涉及认证需注意)。
内容的提问来源于stack exchange,提问作者Bansdns
相关产品推荐
相关产品推荐

