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筛选器最典型的应用就是页面静态化,我们以后在其他文章中在对此进行详细讲解
时间: 2024-08-28 05:19:55

MVC四大筛选器—ActionFilter&ResultedFilter的相关文章

MVC四大筛选器—AuthorizeFilter

在Action的执行中包括两个重要的部分,一个是Action方法本身逻辑代码的执行,第二个就是Action方法的筛选器的执行. MVC4中筛选器都是以AOP(面向方面编程)的方式来设计的,通过对Action方法上标注相应的Attribute标签来实现.MVC4提供了四种筛选器,分别为:AuthorizationFilter.ActionFilter.ExceptionFilter和ResultFilter,他们分别对应了四个筛选器接口IAuthorizationFilter.IActionFil

MVC四大筛选器—ExceptionFilter

该筛选器是在系统出现异常时触发,可以对抛出的异常进行处理.所有的ExceptionFilter筛选器都是实现自IExceptionFilter接口 public interface IExceptionFilter { void OnException(ExceptionContext filterContext); } 实现OnException方法来实现对异常的自定义处理 MVC4中实现了默认的异常处理机制,源码如下 public virtual void OnException(Excep

在ASP.NET MVC中的四大筛选器(Filter)

http://www.cnblogs.com/artech/archive/2012/08/06/action-filter.html http://www.cnblogs.com/ghhlyy/archive/2013/02/26/2933269.html http://www.cnblogs.com/stoneniqiu/p/3654851.html ASP.NET MVC 重点教程一周年版 第六回 过滤器Filter http://www.cnblogs.com/chsword/archi

mvc 筛选器

之前公司中,运用ActionFilterAttribute特性实现用户登录信息的验证,没事看了看,留下点东西备忘. 好的,瞅这玩意一眼就大概能猜到这货是干嘛的了吧,没错,action过滤器.其实就是AOP的思想,将我们的逻辑或业务进行了分片,使我们更加专注于业务的实现.不太清楚的娃子可以度娘下.(其实我也不是很了解,有空再把AOP深入了解下) [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited =

如何在ASP.NET MVC为Action定义筛选器

在ASP.NET MVC中,经常会用到[Required]等特性,在MVC中,同样可以为Action自定义筛选器,来描述控制器所遵守的规则. 首先,我们在ASP.NET MVC项目中定义一个TestController,控制器中包含两个Action动作方法,代码如下: 1 public class TestController : Controller 2 { 3 4 public string FirstPage() 5 { 6 return "请输入ID"; 7 } 8 // 9

MVC中的筛选器

在 ASP.NET MVC 中,控制器将定义一些操作方法,这些操作方法与可能的用户交互(如单击链接或提交窗体)之间通常具有一一对应关系.例如,当用户单击链接时,会将请求路由到指定的控制器,然后调用对应的操作方法. 例如操作完成后你要产生日志.语言筛选.等其他动态操作. 筛选器的由来及用途 有时,您需要在调用操作方法之前或运行操作方法之后执行逻辑. 为了对此提供支持,ASP.NET MVC 提供了筛选器.筛选器是自定义类,可提供用于向控制器操作方法添加操作前行为和操作后行为的声明性和编程性手段.

Asp.Net MVC 页面代码压缩筛选器-自定义删除无效内容

Asp.Net MVC 页面代码压缩筛选器 首先定义以下筛选器,用于代码压缩. /*页面压缩 筛选器*/ public class WhiteSpaceFilter : Stream { private Stream _shrink; private Func<string, string> _filter; public WhiteSpaceFilter(Stream shrink, Func<string, string> filter) { _shrink = shrink;

Asp.Net mvc筛选器中返回信息中断操作

在mvc中,使用response.end()或Response.Redirect("url"); 是无法阻止请求继续往下执行的.如果在action中,可以我们可以使用return 进行中断. 如果在筛选器中如何中断呢?其实我们只用重新复制上下文的result对象,就可以可. sonResult result=new JsonResult(); result.JsonRequestBehavior = JsonRequestBehavior.AllowGet; result.Data =

ASP.NET MVC 全局过滤器(FilterConfig)、标记在控制器上和方法上的筛选器执行顺序

原文:ASP.NET MVC 全局过滤器(FilterConfig).标记在控制器上和方法上的筛选器执行顺序 FilterConfig->控制器上的筛选器-->方法上的筛选器(大-->小,上-->下) 全局-->控制器->个别 尝试的时候记得把返回true 1 protected override bool AuthorizeCore(HttpContextBase httpContext) 2 { 3 //return base.AuthorizeCore(httpC