首页 > 代码库 > MVC四大筛选器—ActionFilter&ResultedFilter
MVC四大筛选器—ActionFilter&ResultedFilter
ActionFilter筛选器
ActionFilter筛选器是在Action方法执行前后会触发,主要用于在Action执行前后处理一些相应的逻辑。ActionFilter的筛选器都继承于ActionFilterAttribute抽象类,而它实现了IActionFilter、IResultFilter和FilterAttribute类,结构如下
因此自定义ActionFilter筛选器只要继承ActionFilterAttribute,实现其中的方法即可。
我们来举一个简单的例子,获取Action方法的执行时长,代码如下
public class DefaultController : Controller { [ActionExecTimeSpan] public ActionResult DoWork() { return View(); } }public class ActionExecTimeSpanAttribute : ActionFilterAttribute { private const string executeActionTimeKey = "ActionExecBegin"; public override void OnActionExecuting(ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); //记录开始执行时间 filterContext.HttpContext.Items[executeActionTimeKey] = DateTime.Now; } public override void OnActionExecuted(ActionExecutedContext filterContext) { //计算执行时间,并记录日志 if (filterContext.HttpContext.Items.Contains(executeActionTimeKey)) { DateTime endTime = DateTime.Now; DateTime beginTime = Convert.ToDateTime(filterContext.HttpContext.Items[executeActionTimeKey]); TimeSpan span = endTime - beginTime; double execTimeSpan = span.TotalMilliseconds; log.Info(execTimeSpan + "毫秒"); } // base.OnActionExecuted(filterContext); } }
ResultFilter筛选器
ResultFilter筛选器是对Action方法返回的Result结果进行执行时触发的。它也分执行前和执行后两个段执行
所有的ResultFilter都实现了IResultFilter接口和FilterAttribute类,看一下接口定义
public interface IResultFilter { void OnResultExecuting(ResultExecutingContext filterContext); void OnResultExecuted(ResultExecutedContext filterContext); }
其中OnResultExecuting和OnResultExecuted方法分别是在Result执行前、后(页面展示内容生成前、后)触发。
使用ResultFilter筛选器最典型的应用就是页面静态化,我们以后在其他文章中在对此进行详细讲解
MVC四大筛选器—ActionFilter&ResultedFilter
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。