ASP.NET MVC 过滤器(四)

前言

前一篇对IActionFilter方法执行过滤器在框架中的执行过程做了大概的描述,本篇将会对IActionFilter类型的过滤器使用来做一些介绍。

ASP.NET MVC过滤器

  • 过滤器在系统框架中的整体对象模型
  • IAuthorizationFilter授权认证过滤器的执行过程
  • 使用IAuthorizationFilter过滤器
  • IActionFilter行为过滤器的执行过程
  • 自定义实现IActionFilter行为过滤器
  • 异常过滤器的使用

自定义实现IActionFilter行为过滤器

还是接着前面控制器篇幅的示例来演示,没看过的朋友也没关系,只要有个一个基础的显示页面就可以了。

图1

这是初始页面调用了IoCDemoController控制器默认的Index方法。

下面我们来实现我们自定义的IActionFilter类型。

代码1-1

     public class MyCustomActionFilterAttribute : FilterAttribute, IActionFilter
{ public void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.HttpContext.Response.Write("这是在控制器方法:" + filterContext.ActionDescriptor.ActionName + "-执行之后"); } public void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.HttpContext.Response.Write("这是在控制器方法:" + filterContext.ActionDescriptor.ActionName + "-执行之前");
}
}

在上篇中我们对上述代码的中设计到类型结构已经作了描述了,在此不再重复,我们定义好了行为过滤器那就把它用起来。

在应用了此过滤器过后我们再来看一下运行的结果:

图2

我们可以试着把过滤器放在所要执行的控制器行为上,而不是控制器:

代码1-2

     public class IoCDemoController : Controller
{
private IDataStandard _DataStandard; public IoCDemoController(IDataStandard dataStandard)
{
_DataStandard = dataStandard;
} [MyCustomActionFilter]
public ActionResult Index()
{
return View(_DataStandard.GetProducts()); }
}

再次运行发现结果会和放在控制器上的结果一样。唯一不同的是过滤器的应用范围不同,放在方法上的时候只有在请求这个控制器行为的时候才会调用这些过滤器,而放在控制器上的过滤器,无论你请求控制器中的哪个行为都会调用。

过滤器的执行顺序

通过前几篇的学习,我们从框架的硬编码中可以看出,控制器不同类型的执行顺序,依次是授权认证过滤器、行为过滤器、结果过滤器。而还有一种异常过滤器,是不受限制的,只要有异常就会触发调用。这里说的是不同类型的过滤器之前的框架调用顺序,那么同一种类型过滤器之间的调用顺序我们怎么控制呢?来看示例:

代码1-3

     public class MyCustomActionFileterOneAttribute : FilterAttribute, IActionFilter
{ public void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.HttpContext.Response.Write("这是" + this.GetType().Name + "过滤器在控制器方法:" + filterContext.ActionDescriptor.ActionName + "-执行之后输出");
} public void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.HttpContext.Response.Write("这是"+this.GetType().Name+"过滤器在控制器方法:" + filterContext.ActionDescriptor.ActionName + "-执行之前输出");
}
}

并且上述1-1代码中的输出示例修改为1-3这样的输入示例,然后我们再把新定义的行为过滤器加到行为方法上:

         [MyCustomActionFilter]
[MyCustomActionFileterOne]
public ActionResult Index()
{
return View(_DataStandard.GetProducts());
}

我们看一下结果如图:

图3

看到这个结果,有的朋友可能会说了,是按照添加后位置的顺序来执行的,可以这么说吧,我们再来修改一下添加在Index()方法之上的两个过滤器中的属性变量Order,这个属性来至IMvcFilter接口类型,所有的过滤器类型都是要实现它的,只不过在我们自定义中的FilterAttribute类型已经帮我们实现了。

看下修改后的示例代码:

代码1-4

         [MyCustomActionFilter(Order=)]
[MyCustomActionFileterOne(Order=)]
public ActionResult Index()
{
return View(_DataStandard.GetProducts());
}

运行结果如图:

对于过滤器的使用还有许多种方式,本篇的IActionFilter类型过滤器就讲解到这里。

作者:金源

出处:http://www.cnblogs.com/jin-yuan/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面

ASP.NET MVC 过滤器(四)的更多相关文章

  1. ASP.NET MVC中有四种过滤器类型

    在ASP.NET MVC中有四种过滤器类型

  2. ASP.NET MVC 过滤器(一)

    ASP.NET MVC 过滤器(一) 前言 前面的篇幅中,了解到了控制器的生成的过程以及在生成的过程中的各种注入点,按照常理来说篇幅应该到了讲解控制器内部的执行过程以及模型绑定.验证这些知识了.但是呢 ...

  3. ASP.NET MVC 视图(四)

    ASP.NET MVC 视图(四) 前言 上篇对于利用IoC框架对视图的实现进行依赖注入,最后还简单的介绍一下自定义的视图辅助器是怎么定义和使用的,对于Razor语法的细节和辅助器的使用下篇会说讲到, ...

  4. ASP.NET MVC 路由(四)

    ASP.NET MVC路由(四) 前言 在前面的篇幅中我们讲解路由系统在MVC中的运行过程以及粗略的原理,想必看过前面篇幅的朋友应该对路由有个概念性的了解了,本篇来讲解区域,在读完本篇后不会肯定的让你 ...

  5. ASP.NET MVC 过滤器(三)

    ASP.NET MVC 过滤器(三) 前言 本篇讲解行为过滤器的执行过程,过滤器实现.使用方式有AOP的意思,可以通过学习了解过滤器在框架中的执行过程从而获得一些AOP方面的知识(在顺序执行的过程中, ...

  6. ASP.NET MVC 过滤器(五)

    ASP.NET MVC 过滤器(五) 前言 上篇对了行为过滤器的使用做了讲解,如果在控制器行为的执行中遇到了异常怎么办呢?没关系,还好框架给我们提供了异常过滤器,在本篇中将会对异常过滤器的使用做一个大 ...

  7. ASP.NET没有魔法——ASP.NET MVC 过滤器(Filter)

    上一篇文章介绍了使用Authorize特性实现了ASP.NET MVC中针对Controller或者Action的授权功能,实际上这个特性是MVC功能的一部分,被称为过滤器(Filter),它是一种面 ...

  8. Asp.net Mvc 过滤器执行顺序

    Asp.net Mvc 过滤器执行顺序: IAuthorizationFilter(OnAuthorization)----->IActionFilter(OnActionExecuting)- ...

  9. ASP.NET MVC过滤器

    在ASP.NET MVC中有个重要特性就是过滤器,使得我们在MVC程序开发中更好的控制浏览器请求的URL,不是每个请求都有响应内容,只有特定得用户才有.园子里关于过滤器的资料也有很多,这篇文章主要是记 ...

随机推荐

  1. 清理SYSAUX表空间

    1.查看SYSAUX表空间中数据分布情况 col SEGMENT_NAME for a30 set lines 999 select * from (select segment_name,PARTI ...

  2. NetMQ(三): 发布订阅模式 Publisher-Subscriber

    ZeroMQ系列 之NetMQ 一:zeromq简介 二:NetMQ 请求响应模式 Request-Reply 三:NetMQ 发布订阅模式 Publisher-Subscriber 四:NetMQ ...

  3. UWP 应用获取 Localhosts 访问权限

    这是一篇教程,写在 win10 版<量子破碎>发售近期. 主要原因:windows 商城的应用下载实在难以忍受...... so 尝试换一个下载环境(f&q)~ 然而使用 ss 并 ...

  4. 更换项目jdk版本

    现在开发用的都是1.7版本,但是以前老的服务器上可能是1.6jdk,这时候就需要我们将项目重新用1.6编译; 修改三个文件(三个地方)即可; 第一步,右键单击项目,选择properties,修改1:J ...

  5. gitbook安装与使用之windows下搭建gitbook平台

    最近需要在GitBook中去阅读电子书 安装nodejs cnpm安装gitbook 解压书籍文件,并cd到书籍文件目录 gitbook serve 浏览器访问localhost:4000 先在win ...

  6. jQuery中的事件绑定方法

    在jQuery中,事件绑定方法大致有四种:bind(),live(), delegate(),和on(). 那么在工作中应该如何选择呢?首先要了解四种方法的区别和各自的特点. 在了解这些之前,首先要知 ...

  7. 关于利用bat文件调用exe批量处理文件下的文件的问题

    for %%i in (E:\radar_20120721\sjz_sa\*.bin) do start/wait radas.exe -i=%%i -o=E:\longjiang\out 找到 文件 ...

  8. Entity FrameWork 5 增删改查 & 直接调用sql语句

    class="brush:csharp;gutter:true;"> #region 1.0 新增 -void Add() /// <summary> /// 1 ...

  9. mac安装java8

    http://stackoverflow.com/questions/24342886/how-to-install-java-8-on-mac brew tap caskroom/cask brew ...

  10. 【第二课】WEBIX 入门自学-获取WEBIX及相关资料

    下载WEBIX组件库 http://webix.com/download/ WEBIX在线文档 http://docs.webix.com/ 离线的手册 下载