.NET Framework 4.0 MVC中OnException处理后重定向异常问题
问题原因分析及解决方向
结合你的场景和代码,导致该问题的核心原因大概率是缓存或路由/编译缓存冲突,具体分以下几种情况:
1. 浏览器缓存了异常重定向响应
之前该Action手动抛出异常时,系统返回了302重定向到登录页的响应。部分浏览器会缓存这类GET请求的重定向结果,即使你移除了异常代码,浏览器依然直接读取缓存的重定向规则,导致点击菜单链接时自动跳转到登录页。
修改Action名称后,请求URL发生变化,浏览器无对应缓存,自然会发起新请求,功能恢复正常。
2. ASP.NET MVC输出缓存或服务器端缓存
如果该Action配置了[OutputCache]特性,或者服务器端(如IIS)开启了动态内容缓存,可能缓存了之前异常时的重定向响应结果。即使代码修改,服务器仍返回缓存内容,导致跳登录。
改Action名称后,缓存的匹配键(基于URL/Action名称)改变,缓存失效,请求正常处理。
3. 路由冲突或编译缓存残留
- 路由冲突:可能存在同名Action在其他控制器中,且该Action仍存在异常,路由规则错误地将请求匹配到了异常Action上。修改名称后,路由匹配正确,指向无异常的目标Action。
- 编译缓存残留:.NET Framework的编译缓存可能残留了旧的Action代码(未完全重新编译),导致执行的还是带异常的旧逻辑。修改Action名称会触发重新编译,清除旧缓存。
验证与解决方法
- 清除浏览器缓存:按
Ctrl+Shift+Del清除当前网站的缓存和Cookie,再测试原Action链接。 - 检查输出缓存配置:查看该Action是否有
[OutputCache]特性,临时移除或调整缓存策略。 - 重启应用程序池:在IIS中重启对应应用程序池,清除服务器端编译和缓存。
- 检查路由规则:确认路由配置中没有将该Action的请求错误导向其他异常Action。
内容的提问来源于stack exchange,提问作者Светослав Пехливанов
相关产品推荐
相关产品推荐

