Azure App Service CORS MissingAllowOriginHeader错误原因咨询
问题原因分析
- 应用网关CORS规则仅覆盖预检请求
你配置的应用网关重写规则触发条件是Access-Control-Request-Method == "PUT",而这个请求头仅会在OPTIONS预检请求中携带,实际发起的PUT请求本身不存在该头,因此重写规则不会对实际PUT请求生效,导致PUT响应缺少Access-Control-Allow-Origin头,触发MissingAllowOriginHeader错误。 - 多层CORS配置冲突
你同时配置了三层CORS规则:.NET Core代码级CORS、Azure App Service内置CORS、应用网关重写CORS头。其中Azure App Service内置CORS优先级高于代码级配置,默认仅处理OPTIONS预检请求,会覆盖/删除代码中返回的CORS头,也会导致实际请求的CORS头丢失。 - .NET Core CORS配置未生效
你仅在ConfigureServices中注册了CORS策略,若未在Configure方法中正确添加app.UseCors(MyAllowSpecificOrigins)中间件,或是中间件顺序错误(需放在UseRouting之后、UseAuthorization之前),也会导致实际请求不会携带CORS响应头。
解决方案
你需要统一CORS处理层级,禁止多层同时处理CORS,可选择以下任意一种方案:
方案1:统一由应用网关处理CORS
- 删除.NET Core代码中所有CORS相关配置
- 关闭Azure App Service内置CORS,执行命令:
az webapp cors remove --resource-group testrg --name appsvcwebapi --allowed-origins --all - 修改应用网关重写规则:
- 保留原有OPTIONS预检请求的CORS头配置
- 新增一条无前置条件的重写规则,匹配所有实际业务请求(GET/PUT/POST等),为响应添加
access-control-allow-origin: https://webappurl等必要CORS头
方案2:统一由Web API侧处理CORS
- 删除应用网关中所有CORS相关的重写规则
- 二选一保留一层CORS配置:
- 保留代码级CORS:关闭App Service内置CORS,确认
Configure方法中已按正确顺序添加app.UseCors(MyAllowSpecificOrigins) - 保留App Service内置CORS:删除代码中所有CORS相关配置,无需修改已执行的
az webapp cors add配置
- 保留代码级CORS:关闭App Service内置CORS,确认
验证时直接查看实际PUT请求的响应头,确认携带
Access-Control-Allow-Origin且值为https://webappurl即可解决问题。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

