ASP.Net MVC过滤器
Posted chenyanbin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.Net MVC过滤器相关的知识,希望对你有一定的参考价值。
1、微软为ASP.Net MVC 提供4种过滤器
• Action过滤器(IAActionFilter):在Action执行之前和执行之后分别做一些操作
• View结果渲染过滤器(IResultFilter):在View结果渲染之前和View渲染之后分别做一些操作
• 全局异常过滤器:ActionFilterAttribute:当整个网站出现异常,做过滤器中的代码
• 身份验证过滤器
2、DEMO示例(Action和View)
第一步:在Models文件夹下创建一个类MyActionFilterAttribute.cs(注:Attribute结束)
第二步:继承筛选器特性的基类:ActionFilterAttribute,并重写基类下的4个方法
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Mvc; 6 7 namespace MVCDemo2.Models 8 9 public class MyActionFilterAttribute:ActionFilterAttribute 10 11 public string Name get; set; 12 /// <summary> 13 /// 在Action执行之前先执行此方法 14 /// </summary> 15 /// <param name="filterContext">筛选器上下文。</param> 16 public override void OnActionExecuted(ActionExecutedContext filterContext) 17 18 base.OnActionExecuted(filterContext); 19 filterContext.HttpContext.Response.Write("OnActionExecuted---"+Name + "<br />"); 20 21 /// <summary> 22 /// 在Action执行之后执行此方法 23 /// </summary> 24 /// <param name="filterContext">筛选器上下文。</param> 25 public override void OnActionExecuting(ActionExecutingContext filterContext) 26 27 base.OnActionExecuting(filterContext); 28 filterContext.HttpContext.Response.Write("OnActionExecuting---" + Name+"<br />"); 29 30 /// <summary> 31 /// 在View渲染之前先执行此方法 32 /// </summary> 33 /// <param name="filterContext">筛选器上下文。</param> 34 public override void OnResultExecuted(ResultExecutedContext filterContext) 35 36 base.OnResultExecuted(filterContext); 37 filterContext.HttpContext.Response.Write("OnResultExecuted---" + Name + "<br />"); 38 39 /// <summary> 40 /// 在View渲染之后执行此方法 41 /// </summary> 42 /// <param name="filterContext">筛选器上下文。</param> 43 public override void OnResultExecuting(ResultExecutingContext filterContext) 44 45 base.OnResultExecuting(filterContext); 46 filterContext.HttpContext.Response.Write("OnResultExecuting---" + Name + "<br />"); 47 48 49
第三步:为控制器打上标签
1 using MVCDemo2.Models; 2 using System.Web.Mvc; 3 4 namespace MVCDemo2.Controllers 5 6 public class HomeDemoController : Controller 7 8 // GET: HomeDemo 9 //Action过滤器 View结果渲染过滤器 全局错误异常过滤器 --身份验证过滤器 10 [MyActionFilter(Name ="HomeDemo/Index")] 11 public ActionResult Index() 12 13 Response.Write("<br /> Action执行啦!~<br />"); 14 return View(); 15 16 17
注:类上打标签,下面所有方法都有效,若方法上打上标签,以方法上的标签为准!!!!!
第四步:效果
3、DEMO示例(全局过滤器:MVC3.0以上)
• 在Global.asax中的Application_Start方法中,我们可以看到执行了全局过滤器方法
•在App_Start文件夹下,找到FilterConfig.cs类,我们给他添加一个标签
1 using MVCDemo2.Models; 2 using System.Web; 3 using System.Web.Mvc; 4 5 namespace MVCDemo2 6 7 public class FilterConfig 8 9 public static void RegisterGlobalFilters(GlobalFilterCollection filters) 10 11 filters.Add(new HandleErrorAttribute()); 12 filters.Add(new MyActionFilterAttribute() Name="全局的过滤器"); 13 14 15
此时所有控制器都实现该标签下的4个重写方法,原理同上
4、补充:实现只要打上标签的都要执行
此时我们只需要在自己创建的标签类上,在打上标签即可([AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)];第一个参数:枚举值,特性应用类型;第二个参数:获取或设置一个布尔值,该值指示指示的属性能否由派生类和重写成员继承。;第三个参数:获取或设置一个布尔值,该值指示能否为一个程序元素指定多个指示属性实例。)
回到我们创建的标签类:MyActionFilterAttribute打上标签
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Mvc; 6 7 namespace MVCDemo2.Models 8 9 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)] 10 public class MyActionFilterAttribute:ActionFilterAttribute 11 12 public string Name get; set; 13 /// <summary> 14 /// 在Action执行之前先执行此方法 15 /// </summary> 16 /// <param name="filterContext">筛选器上下文。</param> 17 public override void OnActionExecuted(ActionExecutedContext filterContext) 18 19 base.OnActionExecuted(filterContext); 20 filterContext.HttpContext.Response.Write("OnActionExecuted---"+Name + "<br />"); 21 22 /// <summary> 23 /// 在Action执行之后执行此方法 24 /// </summary> 25 /// <param name="filterContext">筛选器上下文。</param> 26 public override void OnActionExecuting(ActionExecutingContext filterContext) 27 28 base.OnActionExecuting(filterContext); 29 filterContext.HttpContext.Response.Write("OnActionExecuting---" + Name+"<br />"); 30 31 /// <summary> 32 /// 在View渲染之前先执行此方法 33 /// </summary> 34 /// <param name="filterContext">筛选器上下文。</param> 35 public override void OnResultExecuted(ResultExecutedContext filterContext) 36 37 base.OnResultExecuted(filterContext); 38 filterContext.HttpContext.Response.Write("OnResultExecuted---" + Name + "<br />"); 39 40 /// <summary> 41 /// 在View渲染之后执行此方法 42 /// </summary> 43 /// <param name="filterContext">筛选器上下文。</param> 44 public override void OnResultExecuting(ResultExecutingContext filterContext) 45 46 base.OnResultExecuting(filterContext); 47 filterContext.HttpContext.Response.Write("OnResultExecuting---" + Name + "<br />"); 48 49 50
效果
以上是关于ASP.Net MVC过滤器的主要内容,如果未能解决你的问题,请参考以下文章