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无法确定执行顺序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值