`

7.2自定义开发Filter

阅读更多
Custom Filters

➤IAuthorizationFilter
➤IActionFilter
➤IResultFilter
➤IExceptionFilter

ActionFilterAttribute类

ActionFilterAttribute
public virtual void OnActionExecuted(ActionExecutedContext filterContext);
public virtual void OnActionExecuting(ActionExecutingContext filterContext);
public virtual void OnResultExecuted(ResultExecutedContext filterContext);
public virtual void OnResultExecuting(ResultExecutingContext filterContext);

ActionExcutingContext
属性
ActionParameters
Result


ActionExcutedContext
属性
Canceled   // true 不执行
Exception  //抛出异常情况
ExceptionHandled  // boolean true 拿不到ActionResult
Result  //可能生成假的

ResultExecutingContext
属性
Cancel
Result

ResultExecutedContext
属性
Canceled   // true 不执行
Exception  //抛出异常情况
ExceptionHandled  // boolean true 拿不到ActionResult
Result  //可能生成假的

编写ActionFilter
using System.Diagnostics;
using System.Web.Mvc;
public class TimerAttribute: ActionFilterAttribute{
public TimerAttribute(){
//By default, we should be the last filter to run
//so we run just before and after the action method.
this.Order= int.MaxValue;}
public override void OnActionExecuting(ActionExecutingContextfilterContext){
varcontroller = filterContext.Controller;
if (controller != null){
varstopwatch = new Stopwatch();
controller.ViewData[“__StopWatch”] = stopwatch;
stopwatch.Start();}}
public override void OnActionExecuted(ActionExecutedContextfilterContext){
varcontroller = filterContext.Controller;
if (controller != null){
varstopwatch = (Stopwatch)controller.ViewData[“__StopWatch”];
stopwatch.Stop();
controller.ViewData[“__Duration”] =stopwatch.Elapsed.TotalMilliseconds;}}}


==
[Timer]
public ActionResultIndex() {ViewData[“Title”] = “Home Page”;
ViewData[“Message”] = “Welcome to ASP.NET MVC!”;
varrnd= new Random();
intrandomNumber= rnd.Next(200);
Thread.Sleep(randomNumber);
return View();
}
<p>
The duration was: <%= ViewData[“__Duration”] %>
</p>


Filter执行顺序
1、Order小的先执行
2、具有同样order的,看定义范围
3、无order的最后执行
4、代码内部定义的优先执行
5、同类型的filter无法确定执行顺序



分享到:
评论

相关推荐

    android开发艺术探索高清完整版PDF

    258 6.2.9 Clip Drawable / 260 6.3 自定义Drawable / 262 第7章 Android动画深入分析 / 265 7.1 View动画 / 265 7.1.1 View动画的种类 / 265 7.1.2 自定义View动画 / 270 7.1.3 帧动画 / 272 7.2 View动画的...

    J2EE应用开发详解

    57 4.3.7 Servlet协作 57 4.3.8 Filter 58 4.4 使用Servlet处理客户端请求 58 4.5 会话跟踪 61 4.5.1 使用Cookie进行会话跟踪 61 4.5.2 使用URL重写进行会话跟踪 62 4.5.3 使用隐藏表单域进行会话跟踪 63 4.6 小结 ...

    Android开发艺术探索

    1.3 Intent Filter的匹配规则 / 28 第2章 IPC机制 / 35 2.1 Android IPC简介 / 35 2.2 Android中的多进程模式 / 36 2.2.1 开启多进程模式 / 36 2.2.2 多进程模式的运行机制 / 39 2.3 IPC基础概念介绍 /...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part2

    7.2 Thymeleaf 模板引擎 171 7.2.1 Thymeleaf 基础知识 171 7.2.2 与Spring MVC 集成 174 7.2.3 Spring Boot 的Thymeleaf 支持 175 7.2.4 实战 177 7.3 Web 相关配置 182 7.3.1 Spring Boot 提供的自动配置 182 ...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part1

    7.2 Thymeleaf 模板引擎 171 7.2.1 Thymeleaf 基础知识 171 7.2.2 与Spring MVC 集成 174 7.2.3 Spring Boot 的Thymeleaf 支持 175 7.2.4 实战 177 7.3 Web 相关配置 182 7.3.1 Spring Boot 提供的自动配置 182 ...

    Google Android SDK开发范例大全(完整版)

    6.16 开机程序设计——receiver与intent-filter协同作业 6.17 双向短信常驻服务——Service与receiver实例 第7章 娱乐多媒体 7.1 访问Drawable资源的宽高——ContextMenu与Bitmap的应用 7.2 绘制几何图形——使用...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part3

    7.2 Thymeleaf 模板引擎 171 7.2.1 Thymeleaf 基础知识 171 7.2.2 与Spring MVC 集成 174 7.2.3 Spring Boot 的Thymeleaf 支持 175 7.2.4 实战 177 7.3 Web 相关配置 182 7.3.1 Spring Boot 提供的自动配置 182 ...

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    6.16 开机程序设计——receiver与intent-filter协同作业 6.17 双向短信常驻服务——Service与receiver实例 第7章 娱乐多媒体 7.1 访问Drawable资源的宽高——ContextMenu与Bitmap的应用 7.2 绘制几何图形——使用...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    6.16 开机程序设计——receiver与intent-filter协同作业 6.17 双向短信常驻服务——Service与receiver实例 第7章 娱乐多媒体 7.1 访问Drawable资源的宽高——ContextMenu与Bitmap的应用 7.2 绘制几何图形——使用...

    windows驱动开发技术详解-part2

     7.2 缓冲区方式读写操作  7.2.1 缓冲区设备  7.2.2 缓冲区设备读写  7.2.3 缓冲区设备模拟文件读写  7.3 直接方式读写操作  7.3.1 直接读取设备  7.3.2 直接读取设备的读写  7.4 其他方式读写操作 ...

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    6.16 开机程序设计——receiver与intent-filter协同作业 6.17 双向短信常驻服务——Service与receiver实例 第7章 娱乐多媒体 7.1 访问Drawable资源的宽高——ContextMenu与Bitmap的应用 7.2 绘制几何图形——使用...

    Windows驱动开发技术详解的光盘-part1

     7.2 缓冲区方式读写操作  7.2.1 缓冲区设备  7.2.2 缓冲区设备读写  7.2.3 缓冲区设备模拟文件读写  7.3 直接方式读写操作  7.3.1 直接读取设备  7.3.2 直接读取设备的读写  7.4 其他方式读写操作 ...

    Google Android SDK开发范例大全的目录

    2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色常数的方法 3.3 更改TextView文字颜色...

    Android入门到精通源代码.

    6.3.2 引用用户自定义字体 6.4 应用实例详解:制作手机桌面 6.4.1 实例分析 6.4.2 实例实现 第7章 Android中的核心Intent 7.1 Intent的作用 7.1.1 多Activity的Android应用 7.1.2 Activity之间的消息传递 7.2 Intent...

    Google Android SDK开发范例大全(完整版附部分源码).pdf

    6.16 开机程序设计——receiver与intent-filter协同作业 6.17 双向短信常驻服务——Service与receiver实例 第7章 娱乐多媒体 7.1 访问Drawable资源的宽高——ContextMenu与Bitmap的应用 7.2 绘制几何图形——...

    Delphi5开发人员指南

    7.2 何时使用ActiveX控件 142 7.3 把ActiveX控件加到组件面板上 143 7.4 Delphi组件外套 144 7.4.1 外套文件是从哪来的 152 7.4.2 枚举 152 7.4.3 控件接口 152 7.4.4 TOleControl的派生类 152 7.4.5 方法 152 7.4.6...

    Google Android SDK 开发范例大全01

    6.16 开机程序设计——receiver与intent-filter协同作业 6.17 双向短信常驻服务——Service与receiver实例 第7章 娱乐多媒体 7.1 访问Drawable资源的宽高——ContextMenu与Bitmap的应用 7.2 绘制几何图形——使用...

Global site tag (gtag.js) - Google Analytics