在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. 实现ImageView中两张图片重叠显示

    第一种XML配置 使用layer-list标签 <layer-list xmlns:android="http://schemas.android.com/apk/res/androi ...

  2. 12篇学通C#网络编程

    转自:http://www.cnblogs.com/huangxincheng/archive/2012/01/03/2310779.html 在C#的网络编程中,进程和线程是必备的基础知识,同时也是 ...

  3. 遍历Dataset并输出数据实例

    转自:http://www.cnblogs.com/csdm/archive/2010/02/02/1661808.html <%@ Page Language="C#" A ...

  4. Entity Framework 学习初级篇1--EF基本概况

    转自:http://www.cnblogs.com/Tally/archive/2012/09/14/2685011.html 最近在学习研究微软的EF,通过这时间的学习研究,感觉这个EF目前来说还不 ...

  5. Unix环境高级编程

    1.  windows下编辑的程序怎么上传到linux下执行? //Service vsftpd status查看linux ftp服务是否开启: Linuxi ip:192.168.40.128 打 ...

  6. Selenium - WebDriver 小结(1)

    public class Base { SimpleDateFormat formatterTime = new SimpleDateFormat("yyyyMMdd_hhmmssa&quo ...

  7. Unity3d shader之SWAP Force Depth-of-Field Shader

    由于博主常年逃课,所以期末考试期间只能突击,但偶尔还能拿个奖学金啥的,哈哈,所以近一个月没有做游戏,也没有发博客= =... 这个景深的方法很简单 我们需要求的是CoC(circle of confu ...

  8. bat处理打开关门exe

    @echo off rem rem 注释 tastkill /f /im a.exe cd %CD% %CD:~0,1%: cd  %Cd%b start %CD%a.exe cd .. %CD:~0 ...

  9. DS1302-演示代码

    参考DS1302数据手册,尽管数据手册是英文,但是很有帮助,再结合网上众多的代码写出了下面这个例子,除了涓流充电(trickle charger)功能没使用外,内部的RAM和寄存器功能都使用到了,包括 ...

  10. yii 权限分级式访问控制的实现(非RBAC法)——已验证

    验证和授权——官方文档: http://www.yiichina.com/guide/topics.auth http://www.yiiframework.com/doc/guide/1.1/zh_ ...