关于过滤器的方式
Posted xiaoyangshu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于过滤器的方式相关的知识,希望对你有一定的参考价值。
1.创建过滤类
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace P01MVCFilter.Filters { /// <summary> /// Action方法 过滤器 类 /// </summary> public class MyActionFilterAttribute : ActionFilterAttribute { /// <summary> /// 在 Action方法之前 调用 /// </summary> /// <param name="filterContext"></param> public override void OnActionExecuting(ActionExecutingContext filterContext) { //1. RouteData 中 保存了 当前请求 匹配的 路由信息和路由对象 // 如果本次请求 是请求了某个 区域 里的 控制器方法,还可以通过filterContext.RouteData.DataTokens["area"]获取区域名 //string strArea = filterContext.RouteData.DataTokens["area"].ToString(); string strController = filterContext.RouteData.Values["controller"].ToString(); string strAction = filterContext.RouteData.Values["action"].ToString(); //filterContext.RouteData.GetRequiredString //2.另一种方式 获取 请求的 类名和方法名 string strAction2 = filterContext.ActionDescriptor.ActionName; string strController2 = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName; //2.1检查 被请求方法 是否 加了 MoneyAttribute 特性 if (filterContext.ActionDescriptor.IsDefined(typeof(Filters.MoneyAttribute), false)) { //直接为 请求 设置 返回结果,而不执行 对应的 Action 方法,也不执行 OnActionExcuted,但是,会执行 Result过滤器和 生成视图 filterContext.Result = new ContentResult() { Content = "<br/>哈哈哈,直接被跳过了吧~~~!<br/>" }; } filterContext.HttpContext.Response.Write("哇哈哈哈~!OnActionExecuting<br/>"); base.OnActionExecuting(filterContext); } /// <summary> /// 在 Action方法之后 调用 /// </summary> /// <param name="filterContext"></param> public override void OnActionExecuted(ActionExecutedContext filterContext) { filterContext.HttpContext.Response.Write("哇哈哈哈~!OnActionExecuted<br/>"); base.OnActionExecuted(filterContext); } } }
2.给需要过滤的方法打上标签
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace P01MVCFilter.Controllers { //[Filters.MyActionFilter]//2.将 过滤器 加到当前类上 public class HomeController : Controller { public HomeController() { System.Web.HttpContext.Current.Response.Write(" HomeController 构造函数<br/> "); } //[Filters.MyActionFilter]//1.将 过滤器 加到方法上 //[Filters.Money] [Filters.MyResultFilter] [Filters.MyAuthorize] public ActionResult Index() { Response.Write("Index 方法<br/>"); ViewBag.name = "时间:" + DateTime.Now; return View(); } public ActionResult GetDate() { return View(); } //[Filters.MyHandleError] public ActionResult GetErr() { int a = 0; int b = 1 / a; return View(); } } }
3.或者全局打上标签 +FilterConfig
using System.Web; using System.Web.Mvc; namespace P01MVCFilter { public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { //filters.Add(new HandleErrorAttribute()); //3. 添加全局过滤器 filters.Add(new Filters.MyActionFilterAttribute()); filters.Add(new Filters.MyHandleErrorAttribute()); } } }
以上是关于关于过滤器的方式的主要内容,如果未能解决你的问题,请参考以下文章