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

从Angular调用ASP.NET Core 8 Web API遇POST请求CORS错误求助

ASP.NET Core 8 Web API POST请求CORS拦截问题

我搭建了ASP.NET Core 8 Web API后端,配合.NET 8/Angular 15混合前端,目前GET请求能正常调用API,但POST请求始终被CORS策略拦截。我尝试了多种CORS配置,均无效果。

已尝试的API配置

限定源与请求方法的CORS策略

builder.Services.AddCors(options =>
{
    options.AddDefaultPolicy(builder => {
        builder.WithOrigins("http://localhost:1859");
        builder.WithMethods("GET", "POST");
        builder.AllowAnyHeader();
    });
});

中间件注册顺序:

app.UseHttpsRedirection();
app.UseCors();
app.UseAuthorization();

全放开的宽松CORS策略

builder.Services.AddCors(options =>
{
    options.AddDefaultPolicy(builder => {
        builder.AllowAnyOrigin();
        builder.AllowAnyMethod();
        builder.AllowAnyHeader();
    });
});

控制器方法

已尝试添加[EnableCors()]特性和不添加两种情况:

[HttpPost] 
public async Task<int> Save(SaveContractRequest req)

Angular服务请求代码

saveContract(req: SaveContractRequest) {
    return this.http.post<number>(this.settingsSvc.apiEndpoint + ReimbursementEndPoints.CONTRACTS_SAVE, req);
}

报错信息

Access to XMLHttpRequest at 'http://localhost/evms.api/api/Reimbursement/Contracts/Save' from origin 'http://localhost:1859' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

排查方向

  • 核对中间件顺序:确保UseCors()在UseAuthorization()和MapControllers()之前执行。如果有自定义中间件(比如异常处理、静态文件),UseCors()需要放在静态文件中间件之后、授权和路由中间件之前,避免响应被提前返回导致CORS头未添加。
  • 检查请求是否到达API:用浏览器开发者工具或抓包工具查看请求的状态码。如果是400/404/500等错误,说明API在处理请求时出错,异常处理逻辑可能提前返回响应,跳过了CORS头的注入。
  • 排查HTTPS/HTTP冲突:如果API启用了UseHttpsRedirection(),前端是否用HTTP请求?重定向的响应可能不带CORS头,导致拦截。直接让前端请求HTTPS地址测试。
  • 反向代理/服务器配置:如果API部署在IIS等反向代理后,检查代理层面是否拦截了CORS头,或者未配置跨域支持。
  • 路由匹配验证:确认POST请求的URL和控制器路由完全匹配。如果路由不匹配返回404,API不会注入CORS头。
  • 第三方中间件干扰:检查是否有认证、安全类中间件(比如OWASP相关组件)修改或移除了CORS响应头。

内容的提问来源于stack exchange,提问作者Warren Ayen-Tolson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:07:07