默认提供的过滤器
Authorization filter 实现IAuthorzationfilter
Action filter 实现IActionfilter
Result filter 实现IResultfilter
Exeption filter 实现Exceptionfilter
自定义的过滤器继承:ActionFilterAttribute,其中ActionFilterAttitude:FilterAttribute,IActionFilter,IResultFilter,在该类中存在虚方法
public class MyActionFilterAttribute:ActionFilterAttribute
{
public string Name{get;set;}
public override void onActionExecuting(ActionExecutingContext filterContext) //Action执行之前执行该方法
{
base.OnActionExecuting(filterContext);
HttpContext.Current.Response.Write("<br /> onActionExecuting:"+Name);
}
public override void onActionExecuting(ActionExecutedContext filterContext) //Action执行之后执行该方法
{
base.OnActionExecuted(filterContext);
HttpContext.Current.Response.Write("<br /> onActionExecuted:"+Name);
}
//....
public override void onResultExecuting(ResultExecutingContext filterContext) //ActionResult执行之前执行该方法
{
base.OnActionExecuting(filterContext);
HttpContext.Current.Response.Write("<br /> OnActionExecuting:"+Name);
}
public override void onResultExecuted(ResultExecutedContext filterContext) //Action执行之后执行该方法
{
base.OnActionExecuted(filterContext);
HttpContext.Current.Response.Write("<br /> OnActionExecuted:"+Name);
}
}
将自定义过滤器应用到程序中
[MyActionFilter(Name="Index Action")]
public ActionResult Index()
{
Response.Write("<p>Action执行</p>");
return Content("<br/> OK:视图被渲染了</br>");
}
全局过滤器:
App_Start/FilterConfig.cs
filters.Add(new MyActionFilterResultAttribute(){Name=”Gloable”});
全局过滤器优先级最低,可以作用到所有Action和控制器上‘
允许多个标签同时都其作用 AlloMultiple=true
异常过滤器:
public override void OnException(ExceptionContext filterContext)
{
base.OnException(filterContext);
//当出现异常的时候,才执行该方法
//记录日记
//多线程同时访问一个日记文件,造成性能低,可以考虑内存队列提高性能,Redis
//加入光观察者模式,屏蔽写入不同地方非变化
//log4net
//页面跳转到错误页或者首页
HttpContext.Current.Response.Redirect("/Home/Index");
}