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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 07:02:55