在MVC中有如下过滤器
1.AuthorizeAttribute
2.ActionFilterAttribute
3.HandleErrorAttribute
下面就详细介绍下以及如何使用
一、首先介绍AuthorizeAttribute,这个就是授权过滤器
1.创建一个类,类名后缀必须为Attribute,继承AuthorizeAttribute
2.重写OnAuthorization方法,在方法里面可以验证权限,如Session和Cookie
3.添加标记到方法或类上,如果在方法上添加特性,那么会在添加特性的方法执行前调用OnAuthorization方法。
如果在类上添加特性,那么在执行类中的所有方法前都会调用OnAuthorization方法。
如果要在所有控制器类的方法上都调用OnAuthorization方法,
则在App_Start下的FilterConfig类下的RegisterGlobalFilters方法里面添加注册。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace 过滤器
{
public class MyAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
//在此可以验证权限,如验证Session和Cookie
//可以用filterContext.HttpContext.Session["Key"] 获取Session
base.OnAuthorization(filterContext);
}
}
}
二、ActionFilterAttribute使用跟AuthorizeAttribute类似,执行Action前后和加载View前后过滤器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace 过滤器
{
public class MyActionFilterAttribute: ActionFilterAttribute
{
//加载Action前调用
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//在此也可以进行权限的验证
base.OnActionExecuting(filterContext);
}
//加载Action后调用
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
}
//加载View前调用
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
base.OnResultExecuting(filterContext);
}
//加载View后调用
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
base.OnResultExecuted(filterContext);
}
}
}
三、HandleErrorAttribute使用跟上面两个类似,异常处理过滤器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace 过滤器
{
public class MyHandleErrorAttribute: HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
Exception ex = filterContext.Exception; //获取异常
//在此可以把异常记录到日志里
//跳转到友好页面,避免把错误页显示给用户
filterContext.HttpContext.Response.Redirect("/err.html");
base.OnException(filterContext);
}
}
}
过滤器执行顺序:授权验证过滤器——执行Action前后过滤器——加载View前后过滤器
这是我写的第一篇博客,虽然写得不是很好,但也尽自己努力写的,还请各位谅解,谢谢大家的阅读。