ASP.NET MVC学习笔记-----Filter(2)

接上篇ASP.NET MVC学习笔记-----Filter(1)


Action Filter
Action Filter可以基于任何目的使用,它需要实现IActionFilter接口:
public interface IActionFilter
{
void OnActionExecuting(ActionExecutingContext filterContext);
void OnActionExecuted(ActionExecutedContext filterContext);
}
顾名思义,OnActionExecuting方法将在Action方法执行前调用,而OnActionExecuted方法将在Action方法执行后调用。
 
我们可以看到,OnActionExecuting方法的参数filterContext的类型为ActionExecutingContext,它同样继承于ControllerContext,并额外提供了Result属性和ActionDesciptor属性,它们的作用在上篇已经介绍过。
 
同样,OnActionExecuted方法的参数filterContext的类型为ActionExecutedContext,继承于ControllerContext,额外提供了Result属性,ActionDescriptor属性和Exception属性(Action方法抛出的未处理异常).
 
多说无益,来看一个例子吧:

     public class CustomerActionAttribute : FilterAttribute, IActionFilter
{
private Stopwatch timer; public void OnActionExecuting( ActionExecutingContext filterContext)
{
timer = Stopwatch .StartNew();
}
public void OnActionExecuted( ActionExecutedContext filterContext)
{
timer.Stop(); if (filterContext.Exception == null )
{
filterContext.HttpContext.Response.Write(
string .Format("<div>Action执行时间:{0}</div>" , timer.Elapsed.TotalSeconds));
}
}
}
     public class HomeController : Controller
{
[CustomerAction]
public ViewResult Index()
{
return View();
} }

执行结果:

Result Filter
Result Filter跟Action Filter有些类似,但它是在ActionResult执行前后执行,Result Filter需要实现IResultFilter接口:
public interface IResultFilter
{
void OnResultExecuting(ResultExecutingContext filterContext);
void OnResultExecuted(ResultExecutedContext filterContext);
}
 
ActionFilterAttribute
ASP.NET MVC提供了ActionFilterAttribute,它是一个抽象类,继承FilterAttribute,实现IActionFilter和IResultFilter接口:
public abstract class ActionFilterAttribute : FilterAttribute, IActionFilter, IResultFilter
{
public virtual void OnActionExecuting(ActionExecutingContext filterContext)
{
} public virtual void OnActionExecuted(ActionExecutedContext filterContext)
{
} public virtual void OnResultExecuting(ResultExecutingContext filterContext)
{
} public virtual void OnResultExecuted(ActionExecutingContext filterContext)
{
}
}
感觉这个类,就是给我们提供方便的,让我们能根据需要重写相应的方法。
 
Global Filter 
如果我们需要将一个Filter作用于所有的Controller和Action的话,我们可以在FilterConfig.cs中的RegisterGlobalFilters方法注册全局Filter:
   public class FilterConfig
{
public static void RegisterGlobalFilters( GlobalFilterCollection filters)
{
filters.Add( new HandleErrorAttribute ());
filters.Add( new CustomerActionAttribute ());
}
}
Filter 的执行顺序
总的来说(相同类型的Filter),Global Filter最先执行,随后执行的是作用于Controller的Filter,最后执行的是作用于Action的Filter。但是Exception Filter的执行顺序却是完全相反的。
如果是针对同一个Action或Controller的多个Filter(filer的类型相同),它们的执行顺序是未定的。但是我们可以通过指定Order属性来定义执行顺序。
 
 

ASP.NET MVC学习笔记-----Filter2的更多相关文章

  1. ASP.NET MVC学习笔记-----Filter

    ASP.NET MVC学习笔记-----Filter(1) Filter类型 接口 MVC的默认实现 Description Authorization IAuthorizationFilter Au ...

  2. ASP.NET MVC学习笔记-----Filter(2)

    接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用,它需要实现IActionFilter接口: public ...

  3. ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现

    ASP.NET MVC 学习笔记-2.Razor语法   1.         表达式 表达式必须跟在“@”符号之后, 2.         代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...

  4. ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则

    ASP.NET MVC 学习笔记-7.自定义配置信息   ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...

  5. ASP.NET MVC 学习笔记(1)

    从头开始系统地学习ASP.NET MVC 为什么要学习ASP.NET MVC?原因很多,可以先来看一下最早的ASP.NET WebForm的一些缺点: 传说中面试经常要问到的ASP.NET WebFo ...

  6. 【转】ASP.NET MVC学习笔记-Controller的ActionResult

    1. 返回ViewResult public ActionResult Index()   {       ViewData["Message"] = "Welcome ...

  7. ASP.NET MVC学习笔记-----使用自定义的View Engine

    我们都知道在ASP.NET MVC中自带了Razor View Engine,Razor十分的强大,可以满足我们绝大部分的需要.但是ASP.NET MVC的高度可扩展性,使我们可以使用自定义的View ...

  8. ASP.NET MVC学习笔记-----ActionInvoker

    还是这张图: 当ControllerFactory生成Controller实例后,这时就需要使用ActionInvoker来选择调用一个合适的Action执行.ASP.NET MVC提供的基类Cont ...

  9. ASP.NET MVC 学习笔记 1

    1. 什么是ASP.Net MVC ASP.Net MVC是一种开发Web应用程序的工具(is a web application development framework),采用Model-Vie ...

随机推荐

  1. 【高德地图API】如何获得行政区域?如何制作行政规划图?

    原文:[高德地图API]如何获得行政区域?如何制作行政规划图? 什么是行政规划图?如何获得每个行政区域的边界轮廓图?举例:重庆市 江北区.如图: 官方类参考:http://developer.amap ...

  2. 【Java编码准则】の #12不要使用不安全或者强度弱的加密算法

    安全性要求高的应用程序必须避免使用不安全的或者强度弱的加密算法,现代计算机的计算能力使得攻击者通过暴力破解能够攻破强度弱的算法.比如,数据加密标准算法DES是极度不安全的,使用类似EFF(Electr ...

  3. root运行/media可运行文件权限不够,chmod改动权限无效

    http://blog.csdn.net/pipisorry/article/details/39649699 问题: 我想运行media目录下自己写的某个程序,但无法运行? 1. 于是我以root的 ...

  4. 讨论IT选定的技术招聘企业几点

    在实际的招聘总结的几点思考,企业需要怎么样的人才,例如,以下个人总结: 1.技术能力是不是第一次 企业的时候,你往往看第一点的人的招聘是不是技术实力.但是,你的个人言论的行为和态度.能在半个小时内把你 ...

  5. HDU 3639 Hawk-and-Chicken(Tarjan缩点+反向DFS)

    Problem Description Kids in kindergarten enjoy playing a game called Hawk-and-Chicken. But there alw ...

  6. Git学习笔记1--Git原理简单介绍

    Git是一个分布式的版本号控制工具,假设想用github等版本号控制系统,核心就是git,以下简介一些git的基础原理,原文:http://git-scm.com/book/en/Getting-St ...

  7. SSAS系列——【03】多维数据(多维数据集对象)

    原文:SSAS系列--[03]多维数据(多维数据集对象) 1.什么是Cube? 简单 Cube 对象由基本信息.维度和度量值组组成. 基本信息包括多维数据集的名称.多维数据集的默认度量值.数据源和存储 ...

  8. SSAS系列——【05】多维数据(编程体系结构)

    原文:SSAS系列--[05]多维数据(编程体系结构) 1.什么是AMO? 翻译:AMO是SSAS中一个完整的管理类集合,它在Microsoft.AnalysisServices命名空间下,我们可以在 ...

  9. 进击的Android注入术《二》

    继续 在<一>里,我把基本思路描写叙述了一遍,接下为我们先从注入開始入手. 注入 分类 我们平时所说的代码注入,主要静态和动态两种方式 静态注入,针对是可运行文件,比方平时我们改动ELF, ...

  10. 版本控制工具Vault v7.0更新内容曝光【慧都独家】

    SourceGear公司原定于2013年第三季度发布Vault 7.0版本.近日SourceGear就新版本的更新内容就行了发布,相信Vault 7.0版本也会于不久后面世. 那么Vault 7.0版 ...