ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第六篇:******
; 7 8namespace MVCDemo.Controllers.Filters 9{ 10 public class LoggerFilter : FilterAttribute, IActionFilter 11 { 12 void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext) 13 { 14 filterContext.Controller.ViewData["ExecutingLogger"] = "正 要添加公告,已以写入日志!时间:" + DateTime.Now; 15 } 16 17 void IActionFilter.OnActionExecuted(ActionExecutedContext filterContext) 18 { 19 filterContext.Controller.ViewData["ExecutedLogger"] = "公告添加完成,已以写入日志!时间:" + DateTime.Now; 20 } 21 } 22} 可以看到,这个类继承了FilterAttribute并实现了IActionFilter 。其中关键是IActionFilter,它有两个方法,OnActionExecuting在被拦截Action前执行,OnActionExecuted在被拦截Action后执行。两个方 法都有一个参数,虽然类型不同,但其实都是一个作用:被拦截Action的上下文。 这个地方我得解释一下,你******拦截了Action,在 做处理时难免要用到被拦截Action相关的东西,例如在我们的例子中,就需要想被拦截Action所在Controller的ViewData中添加内容,所以, ******方法有一个参数表示被拦截Action的上下文是顺理成章的事。 下面再看ExceptionFilter这个******,它是在Action出现异常时 发挥作用的。 ExceptionFilter.cs:
异常******一样需要继承 FilterAttribute,但是不要实现IActionFilter,而是要实现IExceptionFilter接口,这个接口只有一个方法:OnException,顾名思义,当然 是发生异常时被调用了。我们看看我让它做了什么:首先将异常信息(ExceptionContext一样也是上下文,而其成员的Exception就是一个 Exception类型的实例,就是被抛出的异常)记录到ViewData相应的键值里,然后我们要呈现Error这个视图。 注意!这里已经不是 Controller里了,而是另一个类,所以当然不能调用View方法返回ViewResult实例了。我们只好新建一个ViewResult实例,并将其视图名设为 Error,将上下文中的DataView传过去。 最后那行filterContext.ExcepitonHandled = true;很重要,这行的意思是告诉系统,异常已 经处理,不要再次处理了。 应用****** 好了,******建立完了,要怎么应用到相应的Action上呢?如果你使用过Spring,你一 定对其AOP是实现之麻烦深有感触,如果你和我一样讨厌写各种XML的话,你真是太幸福了。因为在ASP.NET MVC中,应用拦截器简直是轻松加愉 快。只要将拦截器当做Attribute写在要应用此拦截器的Action上就行了。看代码。 AnnounceController.cs:
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |