ASP.NET Core 3.1部署至IIS后DELETE请求被CORS策略拦截如何解决?
排查思路
第一步 确认是否与新安装的npm包相关
- 回退package.json到安装
ngx-saveAs、saveAS之前的版本,删除node_modules和lock文件后重新安装依赖,重启Angular开发服务测试DELETE请求是否恢复正常- 若请求恢复正常:说明问题与新包有关,可检查两个包的源码,确认是否存在修改全局XMLHttpRequest、篡改请求头/withCredentials配置、注入全局请求拦截器的逻辑,可更换其他导出文件的依赖包替代
- 若问题仍存在:说明和新安装的包无关,继续向下排查
第二步 修复后端CORS配置问题
你当前的CORS配置存在多处语法冲突和规则错误:
- 配置互斥:同时写了
WithMethods("GET", "POST", "DELETE", "PUT")和AllowAnyMethod(),二者规则冲突,删掉其中一个即可,建议保留AllowAnyMethod()减少后续方法限制问题 - 无效Origin规则:CORS的Origin匹配要求必须带完整协议头,
192.168.10.82、192.168.10.164这类不带协议的纯IP条目全部无效,直接删除 - 尾斜杠匹配问题:
http://192.168.10.164/、http://192.168.10.163:64534/这类末尾带斜杠的Origin和不带斜杠的实际请求Origin是完全不同的两个地址,删掉所有末尾带斜杠的Origin条目 - 中间件顺序错误:确认.NET的Configure方法中CORS中间件的注册顺序正确,必须放在路由中间件之后、授权中间件之前,顺序错误会直接导致CORS不生效,正确顺序参考:
app.UseRouting(); // CORS必须放在这个位置 app.UseCors("MyPolicy"); app.UseAuthorization(); app.UseEndpoints(endpoints => { /* 你的端点配置 */ });
第三步 验证请求链路问题
- 打开浏览器控制台网络面板,查看DELETE请求对应的预检OPTIONS请求的返回状态:如果OPTIONS请求返回404/405,说明服务端未允许OPTIONS方法,需要补充配置支持OPTIONS预检请求
- 查看OPTIONS请求的响应头,确认是否存在
Access-Control-Allow-Origin字段,且值为http://localhost:4200,如果没有则说明CORS配置仍未生效 - 检查Angular全局请求拦截器,确认是否给DELETE请求额外添加了未被CORS允许的自定义头,或者修改了withCredentials配置
- 用Postman直接调用该DELETE接口,确认接口本身可正常返回,如果Postman调用也报错,先修复接口本身的业务逻辑问题
内容的提问来源于stack exchange,提问作者Habil Harati
相关产品推荐
相关产品推荐

