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

ASP.NET Core Web API 跨域CORS配置失效问题求助

解决跨域POST请求的预请求错误问题

这个问题我太熟了!这是典型的**跨域资源共享(CORS)**问题——你的JS应用跑在http://localhost:8080,API在http://localhost:8081,属于不同的源(端口不同),浏览器会自动发送一个OPTIONS预请求来验证API是否允许跨域访问,而你的ASP.NET Core API目前没有处理这个预请求,所以被浏览器拦截了。

下面是具体的解决步骤,针对ASP.NET Core Web API配置CORS:

1. 在API中注册并启用CORS服务

根据你的.NET版本,配置方式略有不同:

针对.NET 6+(顶级语句模式)

修改Program.cs文件,先注册CORS策略,再启用CORS中间件:

var builder = WebApplication.CreateBuilder(args);

// 注册CORS服务,配置允许前端访问的规则
builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowLocalFrontend",
        policy =>
        {
            // 指定允许的前端源地址
            policy.WithOrigins("http://localhost:8080")
                  .AllowAnyHeader() // 允许所有请求头
                  .AllowAnyMethod(); // 允许所有HTTP方法(包括POST、OPTIONS)
        });
});

// 添加控制器服务
builder.Services.AddControllers();

var app = builder.Build();

// 重要:CORS中间件必须放在路由和控制器之前
app.UseCors("AllowLocalFrontend");

app.UseRouting();

app.MapControllers();

app.Run("http://localhost:8081");

针对旧版本.NET(Startup.cs模式)

在ConfigureServices方法中注册CORS策略:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy("AllowLocalFrontend",
            policy =>
            {
                policy.WithOrigins("http://localhost:8080")
                      .AllowAnyHeader()
                      .AllowAnyMethod();
            });
    });

    services.AddControllers();
}

然后在Configure方法中启用CORS中间件(注意顺序,要放在路由之前):

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // 其他中间件(如UseHttpsRedirection)
    
    app.UseCors("AllowLocalFrontend");

    app.UseRouting();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

2. 验证修复效果

重启你的ASP.NET Core API服务,然后从http://localhost:8080的JS应用重新发送POST请求,应该就能正常获取API的响应了。

如果还是有问题,可以检查这几点:

  • 确认UseCors中间件的顺序是否正确,必须在UseRouting和控制器映射之前
  • 确认WithOrigins里的地址和你的前端地址完全一致(包括HTTP协议、端口号)
  • 如果需要允许多个前端源,可以用逗号分隔,比如WithOrigins("http://localhost:8080", "http://localhost:3000")

额外说明:为什么Fiddler能正常访问?

因为Fiddler是直接发送HTTP请求,不受浏览器的同源策略限制,所以能正常调用API,但浏览器会严格执行CORS规则,必须API端明确允许跨域才能通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:54:02