在Asp.netMvc中当你有以下及类似以下需求时你可以使用Filter功能
  1. 判断登录与否或用户权限 
    决策输出缓存 
    防盗链 
    防蜘蛛 
    本地化与国际化设置 
    实现动态Action
Filter是一种声明式编程方式,在Asp.net MVC中它只能限制于Action(或它的Controller)。 
Filter要继承于ActionFilterAttribute抽象类,并可以覆写void OnActionExecuting(ActionExecutingContext)和 
void OnActionExecuted(ActionExecutedContext)
以及void OnResultExecuting(ResultExecutingContext)和 
void OnResultExecuted(ResultExecutedContext)
OnActionExecuting是Action执行前的操作,OnActionExecuted则是Action执行后的操作
而OnResultExecuting是解析ActionResult前执行,OnResultExecuted是解析ActionResult后执行。

一、应用于Action的Filter

下面我给大家一个示例,来看看它的的执行顺序 
首先我们先建立 一个Filter,名字叫做TestFilter
  public class TestFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.HttpContext.Session["temp"] += "TestFilter OnActionExecuting<br/>";
} public override void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.HttpContext.Session["temp"] += "TestFilter OnActionExecuted<br/>";
}
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
filterContext.HttpContext.Session["temp"] += "TestFilter OnResultExecuting<br/>";
} public override void OnResultExecuted(ResultExecutedContext filterContext)
{
filterContext.HttpContext.Session["temp"] += "TestFilter OnResultExecuted<br/>";
}
}
然后建立一个Action:
        [TestFilter]//将此Filter应用于Action
public ActionResult filteraction()
{
return View();
}
 
在它的View中写入:
<%Session["temp"] += "View Execute<br/>"; %>
 
最后在其它页面得到Session["temp"]的输出结果:
TestFilter OnActionExecuting
TestFilter OnActionExecuted
TestFilter OnResultExecuting
View Execute
TestFilter OnResultExecuted
由此可得到它们的执行顺序也是如上
 

二、Controller的Filter

将Filter应用在Controller上有2种方式
1.直接将Filter应用在Controller上,如:
    [TestFilter]
public class EiceController : Controller
{
}
 
2.重写Controller内的 
OnActionExecuting/OnActionExecuted/OnResultExecuting/OnResultExecuted的四个方法。
下面我们说几个系统的Filter

三、AcceptVerbs

规定页面的访问形式,如
        [AcceptVerbs(HttpVerbs.Post)]
public ActionResult Example(){
return View();
}
页面只能以Post形式访问,即表单提交。

四、ActionName

规定Action的名称。
应用场景:如果不想用方法名做为Action名,或Action名为关键字的话,如
       [ActionName("class")]
public ActionResult Example(){
return View();
}
 

五、NonAction

当前方法仅是普通方法不解析为Action

六、OutputCache

为Action添加缓存
        [OutputCache(Duration = 60, VaryByParam = "*")]
public ActionResult Example()
{
return View();
}
 

七、ValidateInput

该Action可以接受Html等危险代码(ASP.NET MVC在aspx中设置<%@ Page 的属性无法完成等同任务。)
        [ValidateInput(false)]
public ActionResult Example()
{
return View();
}
 

八、ValidateAntiForgeryTokenAttribute

用于验证服务器篡改。
        [ValidateAntiForgeryToken]
public ActionResult Example()
{
return View();
}

ASP.NET MVC 第六回 过滤器Filter的更多相关文章

  1. Asp.Net MVC学习总结之过滤器详解(转载)

    来源:http://www.php.cn/csharp-article-359736.html   一.过滤器简介 1.1.理解什么是过滤器 1.过滤器(Filters)就是向请求处理管道中注入额外的 ...

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

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

  3. Asp.Net MVC 3【Filters(过滤器)】

    这里分享MVC里的Filters(过滤器),什么是MVC里的过滤器,他的作用是什么? 过滤器的请求处理管道中注入额外的逻辑.他们提供了一个简单而优雅的方式来实现横切关注点.这个术语是指所有对应用程序的 ...

  4. [转]ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)

    有时候你想在调用action方法之前或者action方法之后处理一些逻辑,为了支持这个,ASP.NET MVC允许你创建action过滤器.Action过滤器是自定义的Attributes,用来标记添 ...

  5. ASP.NET MVC 第五回 ActionResult的其它返回值

    我们上边所看到的Action都是return View();我们可以看作这个返回值用于解析一个aspx文件.而它的返回类型是ActionResult如 public ActionResult Inde ...

  6. ASP.NET MVC 4.0的Action Filter

    有时候你想在调用action方法之前或者action方法之后处理一些逻辑,为了支持这个,ASP.NET MVC允许你自定义创建action过滤器.Action过滤器是自定义的Attributes,用来 ...

  7. MVC和Web API 过滤器Filter

    MVC和Web API Filter(过滤器) ASP.NET MVC 支持以下类型的操作筛选器: ·        授权筛选器.这些筛选器用于实现IAuthorizationFilter和做出关于是 ...

  8. ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)

    原帖地址:http://www.cnblogs.com/QLeelulu/archive/2008/10/09/1307660.html 有时候你想在调用action方法之前或者action方法之后处 ...

  9. [ASP.NET MVC 小牛之路]11 - Filter

    Filter(筛选器)是基于AOP(面向方面编程)的设计,它的作用是对MVC框架处理客户端请求注入额外的逻辑,以非常简单优美的方式实现横切关注点(Cross-cutting Concerns).横切关 ...

随机推荐

  1. Android开源项目发现---GridView 篇(持续更新)

    1. StaggeredGridView 允许非对齐行的GridView 类似Pinterest的瀑布流,并且跟ListView一样自带View缓存,继承自ViewGroup 项目地址:https:/ ...

  2. PrintWriter out = response.getWriter() 输出中文乱码问题

    HttpServletResponse response = ServletActionContext.getResponse();        response.setCharacterEncod ...

  3. 监控Tomcat并启动

    #!/bin/sh export _JAVA_SR_SIGNUM= export JAVA_HOME=/usr/java/jdk1..0_11 export CATALINA_BASE=/home/c ...

  4. JavaScript---网络编程(6)-Dom和Bom模型概念讲解(节点获取,window对象)

    本节讲Dom和Bom模型概念讲解(节点获取,window对象). out.js: 写了2个输出到页面的函数. function println(param){ document.write(param ...

  5. bzoj 3226 [Sdoi2008]校门外的区间(线段树)

    3226: [Sdoi2008]校门外的区间 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 615  Solved: 227[Submit][Stat ...

  6. JavaScript高级程序设计49.pdf

    HTML5事件 contextmenu事件 contextmenu事件是冒泡的,可以将事件处理程序指定到document,这个事件的目标是用户操作的元素,在兼容DOM的浏览器中使用event.prev ...

  7. ubuntu adb devices 找不到任何东西,安装驱动

    在Android平台下做开发,adb总是需要使用到的,同时,因为linux没有windows这样操作傻瓜化,有些东西还是需要自行设置的,否则将会连接不上. 关于这些内容,google也有一定的描述,可 ...

  8. hdoj 1002 A + B Problem II【大数加法】

    A + B Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. [置顶] 分析Java死锁:分析jstack日志

    本文中我将展示一段垃圾代码,这段代码会产生死锁,这样围绕这段代码重点展示三种不同的方法来分析线程日志,从而得知什么地方有问题. 下面的讨论将用到两个类 Account 和 DeadlockDemo c ...

  10. WordPress文件上传与下载问题解决

    网上流传了一些修改WordPress文件上传大小限制的做法,大部分是一个版本,而且说得不够准确,特别是对于生手的指导性不强,本文总结了使用Wordpress博客的朋友在文件上传与下载时大小限制,及文件 ...