首页 / ASP.NET / ASP.Net MVC过滤器
ASP.Net MVC过滤器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了ASP.Net MVC过滤器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6072字,纯文字阅读大概需要9分钟。
内容图文
![ASP.Net MVC过滤器](/upload/InfoBanner/zyjiaocheng/741/6ac619ce81384348a76403da1b5a019d.jpg)
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过滤器全部内容,希望文章能够帮你解决ASP.Net MVC过滤器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。