一、概念定义

Filter是一种声明式编程方式,在Asp.net MVC中它只能限制于Action(或它的Controller)。

Filter用途广泛:(1)判断登录与否或用户权限;(2)决策输出缓存;(3)防盗链;(4)防蜘蛛;(5)本地化与国际化设置(6)实现动态Action。

Filter要继承于ActionFilterAttribute抽象类,并覆写四个方法:

(1)OnActionExecuting是Action执行前的操作;(2)OnActionExecuted则是Action执行后的操作;

(3)OnResultExecuting是解析ActionResult前执行;(4)OnResultExecuted是解析ActionResult后执行。

二、创建filter类:类需要继承一个接口,并且重写4个方法

public class paramFilter : System.Web.Mvc.ActionFilterAttribute{//Action执行前的操作public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext){if (filterContext.HttpContext.Request.QueryString["k"] == "go"){string retUrl = filterContext.RouteData.GetRequiredString("controller") + "/" + filterContext.RouteData.GetRequiredString("action");filterContext.HttpContext.Response.Redirect("http://" + filterContext.HttpContext.Request.Url.Host + ":" + filterContext.HttpContext.Request.Url.Port.ToString() + "/" + retUrl);}}//Action执行后的操作public override void OnActionExecuted(System.Web.Mvc.ActionExecutedContext filterContext){base.OnActionExecuted(filterContext);}//解析ActionResult前执行public override void OnResultExecuting(System.Web.Mvc.ResultExecutingContext filterContext){base.OnResultExecuting(filterContext);}//解析ActionResult后执行public override void OnResultExecuted(System.Web.Mvc.ResultExecutedContext filterContext){base.OnResultExecuted(filterContext);}}

View Code

注意:其中 filterContext对象是从页面传过来的。

其中ActionExecutingContext类其属性如下表:

ActionDescriptor 获取或设置操作描述符。
ActionParameters 获取或设置操作方法参数。
Controller 获取或设置控制器。 (从 ControllerContext继承。)
DisplayMode 获取显示模式。 (从 ControllerContext继承。)
HttpContext 获取或设置 HTTP 上下文。 (从 ControllerContext继承。)
IsChildAction 获取一个值,该值指示关联的操作方法是否为子操作。 (从 ControllerContext继承。)
ParentActionViewContext 获取一个对象,该对象包含父操作方法的视图上下文信息。 (从 ControllerContext继承。)
RequestContext 获取或设置请求上下文。 (从 ControllerContext继承。)
Result 获取或设置由操作方法返回的结果。
RouteData 获取或设置 URL 路由数据。 (从 ControllerContext继承。)

获取页面controller值:filterContext.RouteData.GetRequiredString("controller")
获取页面action值:filterContext.RouteData.GetRequiredString("action")
其他页跳转面:filterContext.HttpContext.Response.Redirect()
获取ip地址:filterContext.HttpContext.Request.Url.Host 
获取端口:filterContext.HttpContext.Request.Url.Port.ToString()

三、Filter应用在Controller上的使用方式

1、直接将Filter应用在Controller上,如:

[paramFilter]public class UserController : Controller{}

2、重写Controller内的 OnActionExecuting/OnActionExecuted/OnResultExecuting/OnResultExecuted的四个方法。

四、以下为几个系统的Filter。

1、AcceptVerbs:规定页面的访问形式

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Example(){ return View(); }

2、ActionName:规定Action的名称。

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

3、NonAction:当前方法仅是普通方法不解析为Action。

4、ValidateInput:该Action可以接受Html等危险代码(ASP.NET MVC在aspx中设置<%@ Page 的属性无法完成等同任务)

[ValidateInput(false)]
public ActionResult List() {    return View();    }

5、ValidateAntiForgeryTokenAttribute:用于验证服务器篡改。

[ValidateAntiForgeryToken]
public ActionResult UserAdd()   {   return View();  }

五、Filter的集中应用场景介绍

1、使用场景:验证登录等。

public class LoginFilterAttribute:ActionFilterAttribute{public override void OnActionExecuting(ActionExecutingContext filterContext){//当用户没有验证时if (!filterContext.HttpContext.User.Identity.IsAuthenticated){filterContext.Result = new RedirectToRouteResult("Default", new RouteValueDictionary(new {action="Login"}));}}}

[LoginFilterAttribute]

public ActionResult Index()

2、使用场景:异常处理

public class ErrorActionFilter:ActionFilterAttribute{public override void OnActionExecuted(ActionExecutedContext filterContext){if (filterContext.Exception != null){filterContext.Canceled = true;filterContext.Result = new RedirectToRouteResult("Demo", new RouteValueDictionary(new { action = "ErrorPage" }));}}}[ErrorActionFilter]
public void ErrorHandler()  {    throw new Exception();    }

3、OnResultExecuting:在result执行前发生(在view 呈现前);使用场景:设置客户端缓存,服务器端压缩。

4、OnResultExecuted:在result执行后发生,使用场景:异常处理,页面尾部输出调试信息。

MVC的Filter应用小结相关推荐

  1. MVC用filter做权限过滤

    MVC用filter做权限过滤: 1:创建filter类:类需要继承一个接口,并且重写4个方法:如下: namespace MvcApplication1.Code {     public clas ...

  2. Asp.net MVC使用Filter解除Session, Cookie等依赖

    本文,介绍了Filter在MVC请求的生命周期中的作用和角色,以及Filter的一些常用应用场景. 同时针对MVC中的对于Session,Cookie等的依赖,如何使用Filter解依赖. 如果大家有 ...

  3. [asp.net mvc]自定义filter

    写在前面 最近在摸索mvc,在app中的webview中嵌入h5应用,经常需要用到对cookie的读取操作.所以想到通过自定义的filter截取cookie,然后通过在action上面打特性的方式针对 ...

  4. spring mvc中filter的设计与实现

    抽象类 GenericFilterBean:是javax.servlet.Filter的简单基本实现,将配置参数init-param(web.xml中的fitler标签的)作为bean属性 OnceP ...

  5. java springmvc权限校验_详解Spring MVC使用Filter实现登录及权限验证判断

    登录和权限验证判断在后台管理系统中是最常用的功能,这部分代码是比较固定和独立的,为了减少对业务代码入侵性,一般我会考虑使用Filter来实现,下面我就来详细说一下我的实现思路和代码: 前台页面: St ...

  6. 关于Django ORM filter方法小结

    django filter是一个过滤器,相当于SQL的select * from where.  filter返回一个QuerySet对象,还可以在该对象上继续进行django orm 该有的操作.  ...

  7. MVC 过滤器 Filter(一) 记一次写日志的经历

    1.建一个类 TestFilterAttribute  继承 ActionFilterAttribute  注意应用命名空间 using System.Web.Mvc; public class Te ...

  8. MVC在filter中如何获取控制器名称和Action名称

    使用ActionExecutingContext对象可以获取控制器名称.Action名称.参数名称以及参数值.路由和Action返回值不影响结果. 在代码中 [AttributeUsage(Attri ...

  9. AutoMapper在MVC中的运用小结

    配置.单元测试.AOP注入 Decimal转换成String类型 源数组转换成目标数组 源中的集合(数组)属性转换成目标中的集合(数组)属性 子类父类间的映射 源字典集合转换成目标字典集合 枚举映射 ...

最新文章

  1. R 语言画图中英文字体解决方案
  2. RTEMS 4.9.4 bootcard.c 中的 boot_card 函数分析
  3. SCIP习题 1.21(寻找最小因子)
  4. Azkaban报错:Missing required property ‘azkaban.native.lib’
  5. telnet到设备里 php_金融行业思科设备典型网络故障案例:76系列典型案例(一)...
  6. VS2010中的路径设置
  7. 正则表达式之量词(重复出现)?、*、+
  8. wxpython 优秀的界面_wxPython图形用户界面
  9. Swift ARKit 人脸滤镜保姆级教程
  10. 解决谷歌浏览器自动填充表单
  11. Luyten 启动报错 This Application requires a Java Runtime Environment 1.7.0-1.8.0问题
  12. 企业进行ISO14001环境管理体系的认证实施究竟是为了什么?
  13. 下拉框html回显,html option选中 回显 取值
  14. 指针的运用——快慢指针
  15. XjhDemo 插入数据
  16. python线程间通信
  17. 没有时间进行测试? —有关在Python中对AWS Lambda进行单元测试的12条建议
  18. 程序员如何用技术变现
  19. BGP机房-产品介绍
  20. 面试项目2:基于Spark2.x的电商大数据统计分析平台

热门文章

  1. (LINQ 学习系列)(6)Linq教程实例: 使用自写类代码来访问数据
  2. 【安装配置】克隆方式安装Oracle数据库软件
  3. Java多线程之可见性之volatile
  4. 黑客新技术在ATM钻洞就让其吐钱
  5. linux环境下通过nginx实现tomcat集群
  6. 706. 设计哈希映射
  7. 【毕业设计】JAVA网络通信系统的研究与开发(论文+源代码+开题报告)
  8. seo关键词互点软件报价_舟山seo关键词优化软件
  9. css预处理器_【第十一课】初尝CSS的预处理器
  10. 我有机器人合体成一个大力神_变形金刚动漫人物:狂派霸天虎挖地虎合体金刚-大力神...