欢迎来到天天文库
浏览记录
ID:40542647
大小:217.00 KB
页数:6页
时间:2019-08-04
《ASP.NETMVC的ActionFilter》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、一、ActionFilterActionFilter允许我们在目标Action方法执行前后对调用进行拦截以执行一些额外的操作,所有的ActionFilter实现了具有如下定义的接口IActionFilter。1:publicinterfaceIActionFilter2:{3:voidOnActionExecuting(ActionExecutingContextfilterContext);4:voidOnActionExecuted(ActionExecutedContextfilterContext);5:}6: 7:publicclassActionExecutingContext
2、:ControllerContext8:{9:publicActionExecutingContext();10:publicActionExecutingContext(ControllerContextcontrollerContext,ActionDescriptoractionDescriptor,IDictionaryactionParameters);11:12:publicvirtualActionDescriptorActionDescriptor{get;set;}13:publicvirtualIDictionary3、ct>ActionParameters{get;set;}14:publicActionResultResult{get;set;}15:}16:17:publicclassActionExecutedContext:ControllerContext18:{19:publicActionExecutedContext();20:publicActionExecutedContext(ControllerContextcontrollerContext,ActionDescriptoractionDescriptor,boolcanceled,Exceptionexception);21:4、22:publicvirtualActionDescriptorActionDescriptor{get;set;}23:publicvirtualboolCanceled{get;set;}24:publicvirtualExceptionException{get;set;}25:publicboolExceptionHandled{get;set;}26:publicActionResultResult{get;set;}27:}如上面的代码片断所示,IActionFilter接口中定义了两个方法OnActionExecuting和OnActionExecuted,这两个方法分别在目5、标Action方法执行前后被调用,它们的参数类型分别为ActionExecutingContext和ActionExecutedContext。这两个上下文了类型均是ControllerContext的子类。我们可以从ActionExecutingContext对象中获取到用于描述当前Action的ActionDescriptor,以及参数列表。ActionFilter可以在OnActionExecuting方法中对ActionExecutingContext对象的Result属性进行赋值来直接响应当前的请求。一旦ActionExecutingContext的Result属性被成功赋值,将6、会终止后续ActionFilter和最终目标方法的执行。ActionExecutedContext具有额外的三个属性,Exception表示执行Action方法过程中抛出的异常,而ExceptionHandled是一个表示是否对异常已经做出处理的标记。Canceled属性表示没有完成整个ActionFilter链和目标Action方法的执行而中途被终止。二、ActionFilter的执行机制当ActionInvoker在执行目标Action方法之前,会根据Order和Scope属性对用于封装ActionFilter的Filter对象进行排序。然后根据当前ControllerContext和7、ActionDescriptro创建一个ActionExecutingContext对象,并将其作为参数依次调用所有ActionFilter的OnActionExecuting方法。在这之后真正的目标Action方法被执行,ActionInvoker随后执行后续的筛选操作。具体来说,它根据当前ControllerContext、ActionDescriptro以及Action方法执行过程中抛出的异常创建一个ActionE
3、ct>ActionParameters{get;set;}14:publicActionResultResult{get;set;}15:}16:17:publicclassActionExecutedContext:ControllerContext18:{19:publicActionExecutedContext();20:publicActionExecutedContext(ControllerContextcontrollerContext,ActionDescriptoractionDescriptor,boolcanceled,Exceptionexception);21:
4、22:publicvirtualActionDescriptorActionDescriptor{get;set;}23:publicvirtualboolCanceled{get;set;}24:publicvirtualExceptionException{get;set;}25:publicboolExceptionHandled{get;set;}26:publicActionResultResult{get;set;}27:}如上面的代码片断所示,IActionFilter接口中定义了两个方法OnActionExecuting和OnActionExecuted,这两个方法分别在目
5、标Action方法执行前后被调用,它们的参数类型分别为ActionExecutingContext和ActionExecutedContext。这两个上下文了类型均是ControllerContext的子类。我们可以从ActionExecutingContext对象中获取到用于描述当前Action的ActionDescriptor,以及参数列表。ActionFilter可以在OnActionExecuting方法中对ActionExecutingContext对象的Result属性进行赋值来直接响应当前的请求。一旦ActionExecutingContext的Result属性被成功赋值,将
6、会终止后续ActionFilter和最终目标方法的执行。ActionExecutedContext具有额外的三个属性,Exception表示执行Action方法过程中抛出的异常,而ExceptionHandled是一个表示是否对异常已经做出处理的标记。Canceled属性表示没有完成整个ActionFilter链和目标Action方法的执行而中途被终止。二、ActionFilter的执行机制当ActionInvoker在执行目标Action方法之前,会根据Order和Scope属性对用于封装ActionFilter的Filter对象进行排序。然后根据当前ControllerContext和
7、ActionDescriptro创建一个ActionExecutingContext对象,并将其作为参数依次调用所有ActionFilter的OnActionExecuting方法。在这之后真正的目标Action方法被执行,ActionInvoker随后执行后续的筛选操作。具体来说,它根据当前ControllerContext、ActionDescriptro以及Action方法执行过程中抛出的异常创建一个ActionE
此文档下载收益归作者所有