贵州网站建设
网站建设新闻资讯

ASP.NET MVC全局异常处理和捕获的思路

来源:原创     时间:2016-07-27

这几天稍微研究了下ASP.NET MVC的全局异常处理以及捕获,相比ASP.NET Web Form,ASP.NET MVC的处理方式有所不同,以往是通过注册Global.asax文件中的Application_Error事件进行全局异常捕获,现在MVC可以使用强大的过滤器进行自定义错误的处理。本文作为学习笔记,将ASP.NET MVC中,我已知的几种全局异常捕获及处理的思路进行整理和对比分析。

此方法对于Web Form和MVC来说都是通用的,在ASP.NET中,只要网站程序抛出未捕获的异常都会触发Application_Error事件。我们在事件中通过Server.GetLastError()方法获取Exception对象(可转化成HttpException对象,以获取相关的HTTP错误代码)。

使用此方法一定要把GlobalFilter全局过滤器中的HandleErrorAttribute注册取消掉,也可以将配置文件中的customErrors节点关闭,否则HTTP 500的错误将不会被Application_Error事件捕获。

还要注意一点,如果想在事件中跳转到自己定义的错误页面,那么在响应输出之前一定要记得调用 Server.ClearError()方法清除异常。否则会有下面两种情况,如果自定义错误关闭,会显示错误黄页(即详细异常信息页面),如果没关闭则会跳转到自定义错误定义的页面:

效果如下:

小结:这种方法有非常好的兼容性,可以在Web Form和MVC中通用。另外一点是SEO优化十分友好,我们可以对HTTP错误码进行控制,毕竟customErrors是使用302跳转,是十分不利于SEO的。此外要注意在MVC中Server.Transfer不支持路由!

从此的开发中,又跳过一个小坑!。越努力,越幸运!!!




返回列表
 专注企业形象升级,网站建设、软件开发、微信开发、APP开发      贵州 · 贵阳 华讯互动科技
地址:贵州省贵阳市云岩区中山东路26号
联系:0851-85769676  手机:15185104995
邮编:550001
关于我们 | 联系我们 | 网站地图
贵州华讯互动科技 Copyright© 2004-2018 hi0851.net 黔ICP备15006476号-1
立即咨询
关闭
客服系统