MVC过滤器

新建自己的过滤器.cs,方法和和视图过滤器都继承
ActionFilterAttribute
方法重写
OnActionExecuting
OnActionExecuted
 
视图重写
OnResultExecuting
OnResultExecuted
只要是Action方法都会交内部处理调用这二个方法 
 
而filterContext.RouteData.Values["controller"].ToString();filterContext.RouteData.Values["action"].ToString();可以直接拿到从Url传过来的方法名和控制器名
RouteData里面主要储存了匹配的路由信息
如果本次请求的是请求了某个区域里的控制器方法,还可以通过
filterContext.RouteData.DataTokens["area"].Value.ToString();拿到区域名称
 
补充Filter:
 string actionName = filterContext.ActionDescriptor.ActionName;
            string controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
            //检查 被 请求方法是否加了MoneyAttribute特性
            if (filterContext.ActionDescriptor.IsDefined(typeof(Filters.MoneyAttribute), false))
            {
                //直接为请求设置返回结果,而不执行对应的Action方法,可见html源码,也不执行OnActionExecuted,但是是会执行Result过滤器和生成Result结果
                //filterContext.Result = new ContentResult();
                filterContext.Result = new ContentResult() { Content = "<br />哈哈被跳过了吧<br />" };
 
            }
 
走向图如下:
posted on 2014-03-01 21:39  黑夜寻梦  阅读(259)  评论(0编辑  收藏  举报