.NET 6部署Azure VM后CORS策略拦截请求问题求助
.NET 6部署Azure VM后CORS配置失效排查求助
我了解已有许多同类问题,但因已尝试所有常规方案且仅在特定环境出现问题,故再次咨询。我的.NET 6网站按如下方式启用CORS:
Console.WriteLine(configuration["App:BaseAppPath"]); // 已获取正确值 builder.Services.AddCors(options => { options.AddDefaultPolicy( policy => { policy.WithOrigins(configuration["App:BaseAppPath"]) .AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials(); }); });
该配置在本地环境完全正常,但部署到Azure VM后出现错误。已有建议指出需在部署版本的web.config中添加CORS策略,我已添加如下配置:
<cors enabled="true" failUnlistedOrigins="false"> <add origin="<My Origin>" allowed="true" /> </cors>
但该方案仍无效。我不清楚针对Azure或部署版本是否有特殊配置要求,目前所有尝试均未解决问题,恳请提供可行的排查方向。
错误信息:
Access to XMLHttpRequest at 'XXXX' from origin 'http://mydomain' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
以下是排查方向:
- 检查CORS中间件注册顺序:确保
app.UseCors()放在app.UseRouting()之后、app.UseAuthorization()之前,.NET 6中中间件顺序错误会直接导致CORS响应头无法正常添加。 - 验证Azure VM网络拦截规则:排查VM的Windows防火墙、Azure网络安全组(NSG)是否拦截了OPTIONS预检请求,如果预检请求被阻断,会直接返回无CORS头的错误。
- 确认部署环境的配置值:本地能正确获取
BaseAppPath不代表部署后没问题,检查Azure VM上的appsettings.json、环境变量等配置源,确认Origin值和请求的实际Origin完全匹配(包括协议、域名、端口,比如http://mydomain和http://mydomain:80是不同的Origin)。 - 移除冲突的CORS配置:同时在代码和web.config中配置CORS可能导致冲突,建议先移除web.config中的
<cors>节点,仅保留代码层面的CORS配置后重新测试。 - 检查实际请求的Origin:用浏览器开发者工具或Fiddler抓包,查看请求头中的
Origin字段值,确认和你配置的BaseAppPath完全一致,避免出现拼写、协议(http/https)、端口不一致的情况。 - 排查托管环境的附加配置:如果用IIS托管,确认IIS的CORS模块是否正确安装,或者是否有URL Rewrite等模块修改了响应头;如果直接用Kestrel运行,检查Kestrel配置是否存在覆盖CORS的设置。
- 查看服务器端详细日志:在Azure VM上启用应用的详细日志记录,检查是否有CORS相关的错误日志,或者确认预检请求是否真的到达了应用程序。
内容的提问来源于stack exchange,提问作者Pawan Nogariya
相关产品推荐
相关产品推荐

