从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
相关产品推荐
相关产品推荐

