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

已配置CORS仍报错:请求资源无Access-Control-Allow-Origin头

解决CORS策略阻止请求的问题

你的核心问题是ASP.NET Core中间件顺序配置错误,CORS中间件必须放在正确的执行位置才能生效,按以下步骤修正:

1. 调整中间件执行顺序

ASP.NET Core中间件的执行顺序直接影响功能生效,UseCors需要满足:

  • 在UseRouting之后(路由解析完成后才能匹配CORS策略)
  • 在UseAuthentication、UseAuthorization之前(跨域预检请求需要在认证前完成处理)
  • 在端点映射(MapControllers等)操作之前

同时你代码中重复调用了UseHttpsRedirection,需移除重复项。

修正后的Program.cs关键代码:

var app = builder.Build();

app.UseWatchDogExceptionLogger();

// 开发环境配置
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI(opts =>
    {
        opts.SwaggerEndpoint("/swagger/v1/swagger.json", "v1");
    });
}

app.UseHttpsRedirection();
app.UseResponseCaching();
app.UseRouting();

// CORS中间件放在此处:路由之后,认证授权之前
app.UseCors();

app.UseAuthentication();
app.UseAuthorization();
app.UseIpRateLimiting();

// 端点映射需在所有中间件配置完成后执行
app.MapControllers();
app.MapHealthChecks("/health", new HealthCheckOptions
{
    ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
});
app.MapHealthChecksUI();

app.UseWatchDog(opts =>
{
    opts.WatchPageUsername = app.Configuration.GetValue<string>("WatchDog:Username");
    opts.WatchPagePassword = app.Configuration.GetValue<string>("WatchDog:Password");
    opts.Blacklist = "health";
});

app.Run();

2. React请求代码优化(可选)

你的React代码中无需手动用JSON.stringify序列化参数,axios会自动处理对象序列化,简化代码同时避免潜在格式问题:

async function handleSubmit(e) {
    e.preventDefault();
    try {
      const response = await axios.post(
        "https://localhost:7078/api/v1/Authentication/token",
        { userName, password }, // 直接传入对象,无需JSON.stringify
        {
          headers: {
            "Content-type": "application/json",
          },
        }
      );
      console.log(response.data);
    } catch (err) {
      console.error(err.response?.data || err.message); // 捕获错误便于排查问题
    }
  }

3. 额外排查方向

如果调整顺序后仍存在问题:

  • 确认API项目的HTTPS配置正常,React请求的URL(协议、端口)与API运行地址完全匹配
  • 检查WatchDog、IP限流等中间件是否修改或拦截了CORS响应头
  • 在浏览器开发者工具的Network标签中,查看预检OPTIONS请求的响应头,确认是否包含Access-Control-Allow-Origin字段

内容的提问来源于stack exchange,提问作者stepup.stepout

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:55:28