You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决React调用ASP.NET Core 6 Web API POST带Body的CORS跨域问题

解决ASP.NET Core 6 Web API CORS预检失败问题

你的问题核心是带JSON请求体的POST触发了CORS预检请求(OPTIONS),但服务器未正确响应该请求,导致浏览器拦截后续请求。以下是针对性的修复步骤:

1. 确保模型绑定正确配置

你的Post方法参数User需要显式添加[FromBody]特性,确保ASP.NET Core从请求体中解析JSON数据:

[HttpPost]
public IActionResult Post([FromBody] User user)
{
    return Ok(user);
}

同时,必须保证User类是public访问级别,且属性可读写。如果User是定义在TestController内部的嵌套类,必须加上public修饰符:

public class User
{
    public string firstName { get; set; }
    public string lastName { get; set; }
}

如果User类是internal/private,模型绑定会失败,服务器会提前返回错误,导致CORS头无法被添加到响应中。

2. 验证中间件顺序(已配置正确,但再次确认)

确保UseCors中间件在正确的位置执行,你的现有配置顺序是正确的:

// 正确顺序:Swagger -> CORS -> 授权 -> 路由映射
app.UseSwagger();
app.UseSwaggerUI();
app.UseCors(MyAllowSpecificOrigins); // 必须在MapControllers和UseAuthorization之前
app.UseAuthorization();
app.MapControllers();

UseCors必须在MapControllers之前,否则CORS中间件无法拦截控制器的请求(包括预检OPTIONS请求)。

3. 额外排查点

  • 检查浏览器网络面板中的OPTIONS请求响应:确认是否返回204状态码,且包含Access-Control-Allow-Origin、Access-Control-Allow-Credentials等头信息。
  • 如果OPTIONS请求返回404,可手动添加OPTIONS请求映射:
app.MapMethods("/Test", new[] { "OPTIONS" }, () => Results.NoContent());

经过以上调整,带请求体的POST请求应该可以正常触发控制器的断点,且CORS错误会消失。

内容的提问来源于stack exchange,提问作者user12858805

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 11:35:38