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

.NET API启用CORS问题求助:React前端Fetch请求遭拦截

解决React + .NET API的CORS跨域问题

你的CORS错误主要来自三个核心问题:前端请求错误添加了服务器专属响应头、.NET的CORS政策配置不完整、中间件顺序可能不符合要求。以下是具体修复步骤:

1. 修正前端Fetch请求代码

前端请求中不需要携带Access-Control-Allow-Origin和Access-Control-Allow-Credentials——这两个是服务器返回给前端的响应头,客户端发送它们会触发额外的预检请求,反而导致跨域失败。修改后的代码:

var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify({
    "userText": e.target.value
});

var requestOptions = {
    method: 'POST',
    headers: myHeaders,
    body: raw,
    redirect: 'follow',
};

fetch("https://localhost:7101/api/Game/UserText", requestOptions)
    .then(response => response.text())
    .then(result => console.log(result))
    .catch(error => console.log('error', error));

2. 完善.NET的CORS配置

更新Program.cs中的CORS政策,确保允许必要的请求头、方法,同时严格控制中间件顺序(UseCors必须放在UseRouting之后、UseAuthorization之前):

var MyAllowSpecificOrigins = "_myAllowSpecificOrigins";

builder.Services.AddCors(options =>
{
    options.AddPolicy(name: MyAllowSpecificOrigins,
                      policy =>
                      {
                          // 推荐指定具体前端Origin,比通配符*更安全
                          policy.WithOrigins("http://localhost:3000")
                                .AllowAnyHeader() // 允许所有请求头(包括Content-Type)
                                .AllowAnyMethod(); // 允许所有HTTP方法(含OPTIONS预检请求)
                          
                          // 若必须允许所有Origin,用以下配置(注意:不能与AllowCredentials同时使用)
                          // policy.AllowAnyOrigin()
                          //       .AllowAnyHeader()
                          //       .AllowAnyMethod();
                      });
});

// 中间件顺序必须严格遵循:Routing → Cors → Authorization → Controllers
app.UseRouting();

app.UseCors(MyAllowSpecificOrigins);

app.UseAuthorization();

app.MapControllers();

app.Run();

3. 验证控制器路由正确性

确保GameController类上的路由特性与方法路由组合后,和前端请求地址完全匹配:

[Route("api/[controller]")]
[ApiController]
public class GameController : ControllerBase
{
    [HttpPost]
    [Route("UserText")]
    public IActionResult GetUserText([FromBody] UserText userText)
    {
        Console.WriteLine(userText.userText);
        return Ok();
    }
}

4. 最终验证步骤

  • 重启.NET后端服务和React前端服务,确保配置修改生效
  • 禁用Chrome的CORS扩展(扩展可能干扰正常的CORS校验逻辑)
  • 检查.NET项目launchSettings.json中的applicationUrl是否为https://localhost:7101

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:11:10