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

如何在ASP.NET MVC与ReactJS中启用CORS?问题求助

解决ASP.NET MVC与ReactJS的CORS跨域问题

问题根源分析

从你的代码和报错信息来看,核心问题有两个:

  1. 重复注册控制器服务:ConfigureServices中两次调用services.AddControllers().AddNewtonsoftJson(),第二次调用会重置之前的服务配置,导致CORS策略无法正确绑定到控制器。
  2. 中间件顺序错误:UseCors的位置不符合ASP.NET Core中间件执行逻辑,必须在UseRouting之后、UseAuthorization之前,才能正确注入CORS响应头。

修正步骤

1. 修复ConfigureServices中的重复服务注册

删除重复的控制器注册代码,保留一次完整配置:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers()
        .AddNewtonsoftJson(options =>
        {
            options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
            options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
        });
    
    services.AddCors(options =>
    {
        options.AddPolicy("MyCorsPolicy", builder =>
        {
            builder.WithOrigins("http://localhost:3000")
                   .AllowAnyMethod()
                   .AllowAnyHeader();
        });
    });
}

2. 调整中间件顺序

将UseCors移动到UseRouting之后、UseAuthorization之前,确保CORS策略在路由匹配后、授权验证前生效:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    
    app.UseRouting();
    
    // 正确位置:路由之后,授权之前
    app.UseCors("MyCorsPolicy");
    
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

3. 可选:显式在控制器上启用CORS策略

为确保策略精准应用到API控制器,可在控制器类上添加[EnableCors]特性:

[ApiController]
[Route("api/[controller]")]
[EnableCors("MyCorsPolicy")]
public class UserController : ControllerBase
{
    // 你的API Action方法
}

额外验证点

  • 确认前端请求的Origin(http://localhost:3000)与WithOrigins中配置的地址完全一致,注意不要带末尾斜杠(http://localhost:3000/会被视为不同源)。
  • 检查是否存在自定义中间件或过滤器拦截了响应,导致CORS头未被正确返回。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:41:10