MVC的Filter应用小结
一、概念定义
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应用小结相关推荐
- MVC用filter做权限过滤
MVC用filter做权限过滤: 1:创建filter类:类需要继承一个接口,并且重写4个方法:如下: namespace MvcApplication1.Code { public clas ...
- Asp.net MVC使用Filter解除Session, Cookie等依赖
本文,介绍了Filter在MVC请求的生命周期中的作用和角色,以及Filter的一些常用应用场景. 同时针对MVC中的对于Session,Cookie等的依赖,如何使用Filter解依赖. 如果大家有 ...
- [asp.net mvc]自定义filter
写在前面 最近在摸索mvc,在app中的webview中嵌入h5应用,经常需要用到对cookie的读取操作.所以想到通过自定义的filter截取cookie,然后通过在action上面打特性的方式针对 ...
- spring mvc中filter的设计与实现
抽象类 GenericFilterBean:是javax.servlet.Filter的简单基本实现,将配置参数init-param(web.xml中的fitler标签的)作为bean属性 OnceP ...
- java springmvc权限校验_详解Spring MVC使用Filter实现登录及权限验证判断
登录和权限验证判断在后台管理系统中是最常用的功能,这部分代码是比较固定和独立的,为了减少对业务代码入侵性,一般我会考虑使用Filter来实现,下面我就来详细说一下我的实现思路和代码: 前台页面: St ...
- 关于Django ORM filter方法小结
django filter是一个过滤器,相当于SQL的select * from where. filter返回一个QuerySet对象,还可以在该对象上继续进行django orm 该有的操作. ...
- MVC 过滤器 Filter(一) 记一次写日志的经历
1.建一个类 TestFilterAttribute 继承 ActionFilterAttribute 注意应用命名空间 using System.Web.Mvc; public class Te ...
- MVC在filter中如何获取控制器名称和Action名称
使用ActionExecutingContext对象可以获取控制器名称.Action名称.参数名称以及参数值.路由和Action返回值不影响结果. 在代码中 [AttributeUsage(Attri ...
- AutoMapper在MVC中的运用小结
配置.单元测试.AOP注入 Decimal转换成String类型 源数组转换成目标数组 源中的集合(数组)属性转换成目标中的集合(数组)属性 子类父类间的映射 源字典集合转换成目标字典集合 枚举映射 ...
最新文章
- R 语言画图中英文字体解决方案
- RTEMS 4.9.4 bootcard.c 中的 boot_card 函数分析
- SCIP习题 1.21(寻找最小因子)
- Azkaban报错:Missing required property ‘azkaban.native.lib’
- telnet到设备里 php_金融行业思科设备典型网络故障案例:76系列典型案例(一)...
- VS2010中的路径设置
- 正则表达式之量词(重复出现)?、*、+
- wxpython 优秀的界面_wxPython图形用户界面
- Swift ARKit 人脸滤镜保姆级教程
- 解决谷歌浏览器自动填充表单
- Luyten 启动报错 This Application requires a Java Runtime Environment 1.7.0-1.8.0问题
- 企业进行ISO14001环境管理体系的认证实施究竟是为了什么?
- 下拉框html回显,html option选中 回显 取值
- 指针的运用——快慢指针
- XjhDemo 插入数据
- python线程间通信
- 没有时间进行测试? —有关在Python中对AWS Lambda进行单元测试的12条建议
- 程序员如何用技术变现
- BGP机房-产品介绍
- 面试项目2:基于Spark2.x的电商大数据统计分析平台
热门文章
- (LINQ 学习系列)(6)Linq教程实例: 使用自写类代码来访问数据
- 【安装配置】克隆方式安装Oracle数据库软件
- Java多线程之可见性之volatile
- 黑客新技术在ATM钻洞就让其吐钱
- linux环境下通过nginx实现tomcat集群
- 706. 设计哈希映射
- 【毕业设计】JAVA网络通信系统的研究与开发(论文+源代码+开题报告)
- seo关键词互点软件报价_舟山seo关键词优化软件
- css预处理器_【第十一课】初尝CSS的预处理器
- 我有机器人合体成一个大力神_变形金刚动漫人物:狂派霸天虎挖地虎合体金刚-大力神...