迁移ASP.NET Web应用至Windows Server 2022后WebResource.axd加载失败(403禁止访问)
遇到这种WebResource.axd的403问题确实挺闹心的,我之前迁移老ASP.NET应用到新服务器时也碰到过类似情况。结合你本地IIS Express正常、服务器端IIS+Plesk出问题的场景,大概率是服务器端的配置或权限细节没到位,给你几个针对性的排查方向:
检查ASP.NET的服务器注册状态
Windows Server 2022上的IIS可能没有正确注册ASP.NET运行环境,尤其是你的应用基于较老版本的.NET Framework时。以管理员身份打开命令提示符,找到对应.NET版本的aspnet_regiis.exe(比如.NET 4.x的路径一般是C:\Windows\Microsoft.NET\Framework\v4.0.30319或Framework64下),运行命令:aspnet_regiis.exe -i完成注册。同时在IIS管理器里,检查网站的ISAPI筛选器,确保ASP.NET相关的筛选器存在且处于启用状态。验证IIS身份与处理程序映射配置
你已经给Plesk生成的身份设置了目录权限,但还要确认:- IIS网站的身份验证中,匿名身份验证已启用,且匿名用户使用的是Plesk配置的应用池身份(或确保
IIS_IUSRS组对网站目录有读权限); - 查看IIS的处理程序映射,确认
.axd对应的ASP.NET处理程序(比如System.Web.UI.PageHandlerFactory)存在且未被禁用——WebResource.axd是ASP.NET内置的资源处理程序,一旦这个映射出问题就会导致访问被拒。
- IIS网站的身份验证中,匿名身份验证已启用,且匿名用户使用的是Plesk配置的应用池身份(或确保
排查IIS请求过滤规则
IIS自带的请求过滤可能误拦截了.axd后缀的请求。在IIS管理器的网站级别打开请求过滤:- 切换到“文件扩展名”标签,检查是否存在拒绝
.axd的规则,若有则删除; - 再看“隐藏段”标签,确认
WebResource.axd不在列表中,若存在则移除。
- 切换到“文件扩展名”标签,检查是否存在拒绝
检查Plesk的附加安全限制
Plesk自带的安全模块(比如ModSecurity)可能会把WebResource.axd的请求误判为恶意请求。你可以暂时禁用Plesk的Web应用程序防火墙(ModSecurity)试试,如果问题解决了,再去配置规则排除/WebResource.axd路径的拦截。另外也可以检查Plesk里的URL重写规则,有没有不小心拦截了该路径。确认应用程序池的配置匹配
确保服务器上应用程序池的.NET Framework版本和你本地开发环境完全一致,托管模式建议选择集成模式(经典模式下容易出现处理程序映射兼容问题,尤其是.NET 2.0以上的应用)。
如果以上方法还没解决,可以试试启用IIS的失败请求跟踪(FRT),它能详细记录403错误是由哪个模块触发的(比如权限模块、请求过滤模块等),帮你精准定位问题根源。
备注:内容来源于stack exchange,提问作者Bernd Morgeneyer

