[.Net MVC] 过滤器以及异常处理
项目:后台管理平台
意义:程序发布后,不应该对用户显示因程序出错和崩溃而出现的错误信息,采用统一友好的错误页面,并将错误信息记录到日志中供管理人员查看。
一、过滤器Filter
Filter(筛选器)是基于AOP(面向方面编程)的设计,它的作用是对MVC框架处理客户端请求注入额外的逻辑,以非常简单优美的方式实现横切关注点(Cross-cutting Concerns)。横切关注点是指横越应该程序的多个甚至所有模块的功能,经典的横切关注点有日志记录、缓存处理、异常处理和权限验证等。
MVC框架支持4类Filter,Authorization Filter/Action Filer/Result Filter/Exception Filter,其中Authorization Filter的默认实现AuthorizeAttribute类,Action Filter和Result Filter的默认实现是ActionFilterAttribute类,Exception Filter的默认实现是HandleErrorAttribute。
Filter可以像标记属性一样用在动作、控制器上,也可以在应用在全局上,在Global.asax.cs和FilterConfig.cs中添加全局绑定。
如果默认的Filter无法满足开发要求,需要自己开发Filter时,最好的方法是继承默认的类,重写关键函数:
Authorization Filter的扩展通过继承AuthorizeAttribute类,重写权限认证的逻辑函数AuthorizeCore;
Action Filer和Result Filter的扩展通过继承ActionFilterAttribute类,重写OnActionExecuting/OnActionExecuted/OnResultExecuting/OnResultExecuted函数;
Exception Filter的扩展通过继承HandleErrorAttribute类,重写OnException函数。
二、异常处理
在项目中采用了全局性的异常处理,因此通过继承HandleErrorAttribute,并重写OnException函数,目前只是增加了异常的日志记录。
出现了异常还需要一个对用户友好的显示页面,在Web.config文件中 <system.web> 节点下添加如下节点:
<customErrors mode="On"> <error statusCode ="404" redirect="/Error/Index"/> </customErrors>
对于程序运行时抛出的错误,系统会在~/Views/[current controller]或~/Views/Shared目录下查找名为Error的视图;对于404这类的HTTP错误,可以通过添加对应的节点,指定其显示的错误页面,再编写对应的控制器、视图即可。
参考资源:
http://www.cnblogs.com/willick/p/3331520.html
http://www.cnblogs.com/powertoolsteam/p/MVC_Six.html
关键字:.NET MVC,Filter,EXCEPTION,AOP