在ASP.NET MVC中有四种过滤器类型
aaarticlea/png;base64,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" alt="" />
Action
1、在ASP.NET MVC项目中,新建文件夹Filter,然后新建类MyCustormFilter,继承自ActionFilterAttribute类,我们来看下ActionFilterAttribute类有如下四个方法,从命名我应该就可以看出他们的执行时机。
public class MyCustormFilter:ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.HttpContext.Response.Write("Action执行前");
base.OnActionExecuting(filterContext);
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.HttpContext.Response.Write("Action执行后");
base.OnActionExecuted(filterContext);
}
}
2、对于过滤器,我们可以把它们加在三个地方,一个是控制器上面(控制器下面的所有Action),一个是Action上面(指定标识的Action),另一个就是全局位置(所有控制器中的Action)。这里我只演示在Action上面加
[MyCustormFilter]
public ActionResult Index()
{
return View();
}
public ActionResult Index1()
{
return View();
}
3、build然后运行
Result
1、新建类TestResultFilter,继承ActionFilterAttribute
public class TestResultFilter:ActionFilterAttribute
{
/// <summary>
/// 加载 "视图" 前执行
/// </summary>
/// <param name="filterContext"></param>
public override void OnResultExecuting(System.Web.Mvc.ResultExecutingContext filterContext)
{
filterContext.HttpContext.Response.Write("加载视图前执行 OnResultExecuting <br/>");
base.OnResultExecuting(filterContext);
} /// <summary>
/// 加载"视图" 后执行
/// </summary>
/// <param name="filterContext"></param>
public override void OnResultExecuted(System.Web.Mvc.ResultExecutedContext filterContext)
{
filterContext.HttpContext.Response.Write("加载视图后执行 OnResultExecuted <br/>");
base.OnResultExecuted(filterContext);
}
}
2、这里我把TestResultFilter过滤器加在控制器上面
[TestResultFilter]
public class FilterTestController : Controller
{
[MyCustormFilter]
public ActionResult Index()
{
return View();
}
public ActionResult Index1()
{
return View();
}
}
3、运行看下结果
注意:Result过滤器,无论Action的返回类型为什么(甚至void)都将执行。
RouteData中保存了当前请求匹配的路由信息和路由对象
修改MyCustormFilter.cs
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//1.获取获取请求的类名和方法名
string strController = filterContext.RouteData.Values["controller"].ToString();
string strAction = filterContext.RouteData.Values["action"].ToString();//2.另一种方式 获取请求的类名和方法名
string strAction2 = filterContext.ActionDescriptor.ActionName;
string strController2 = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName; filterContext.HttpContext.Response.Write("Action执行前</br>");
filterContext.HttpContext.Response.Write("控制器:" + strController + "</br>");
filterContext.HttpContext.Response.Write("控制器:" + strController2+"</br>");
filterContext.HttpContext.Response.Write("Action:" + strAction + "</br>");
filterContext.HttpContext.Response.Write("Action:" + strAction2 + "</br>");
base.OnActionExecuting(filterContext);
}
AuthorizeAttribute
1、 新建TestAuthorizeAttribute
/// <summary>
/// 授权过滤器 --在Action过滤器前执行
/// </summary>
public class TestAuthorizeAttribute:AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
filterContext.HttpContext.Response.Write("<br/>OnAuthorization<br/>");
//注释掉父类方法,因为父类里的 OnAuthorization 方法会调用asp.net的授权验证机制!
//base.OnAuthorization(filterContext);
}
}
2、在控制器FilterTest中的Index上添加TestAuthorize标记
[MyCustormFilter]
[TestAuthorize]
public ActionResult Index()
{
return View();
}
运行看下结果:
Exception
1、新建TestHandleError.cs
/// <summary>
/// 异常处理 过滤器
/// </summary>
public class TestHandleError : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
//1.获取异常对象
Exception ex = filterContext.Exception;
//2.记录异常日志
//3.重定向友好页面
filterContext.Result = new RedirectResult("~/error.html");
//4.标记异常已经处理完毕
filterContext.ExceptionHandled = true; base.OnException(filterContext);
}
}
2、在Action上面加TestHandleError
[TestHandleError]
public ActionResult GetErr()
{
int a = 0;
int b = 1 / a;
return View();
}
注意:通常这样的异常处理我们是放在全局过滤器上面的。
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//filters.Add(new HandleErrorAttribute());
//添加全局过滤器
filters.Add(new TestHandleError());
}
}