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 />" };
}
走向图如下: