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

ASP.NET Core Web API POST请求遭CORS拦截,GET请求正常问题排查

ASP.NET Core Web API POST请求CORS错误但GET请求正常的问题排查

问题场景

我基于C#开发了一个已配置CORS的ASP.NET Core Web API,前端使用React/JavaScript部署在另一台服务器,通过fetch调用API时出现如下问题:

  • POST请求触发CORS错误
  • GET请求可以正常获取数据,无CORS问题

POST请求代码

fetch('http://servername:8082/api/company/createedit', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(formData)
    })
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.error('Error:', error));  

CORS错误信息

Access to fetch at 'http://servername:8082/api/company/createedit' from origin 'http://localhost:5173' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

正常的GET请求代码

fetch('http://servername:8082/api/company/getall')
    .then((response)=> response.json())
    .then((data) => { 
        setRequests(data.value); 
        console.log(data);
});

API的CORS配置(Program.cs)

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

// CORS
builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowAnyOrigin", builder =>
    {
        builder.AllowAnyOrigin()
               .AllowAnyMethod()
               .AllowAnyHeader();
    });
});

var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}
app.UseHttpsRedirection();

// CORS
app.UseCors("AllowAnyOrigin");

app.UseAuthorization();
app.MapControllers();
app.Run();

更新:问题根源与解决方法
经过排查,发现错误并非来自POST请求的正常JsonResult响应,而是控制器中未处理的异常导致返回了BadRequestObjectResult,这个结果没有携带Access-Control-Allow-Origin响应头,从而触发了CORS错误。

通过在控制器中处理异常,改用JsonResult替代BadRequestObjectResult返回后,响应头中正确包含了Access-Control-Allow-Origin,CORS问题解决。测试证实:Program.cs中配置的CORS规则,在控制器返回由异常生成的BadRequestObjectResult时不会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:12:40