过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响应内容,只响应特定内容给那些有特定权限的用户,过滤器理论上有以下功能:
判断登录与否或用户权限
决策输出缓存
防盗链
防蜘蛛
本地化与国际化设置
实现动态Action(做权限管理系统的好东西)
1.MVC4提供了四种过滤器
分别是: 身份验证过滤器,行为过滤器,结果过滤器,异常过滤器
分别要实现:AuthorizeAttribute,ActionFilterAttribute,ActionFilterAttribute,HandleErrorAttribute
分别要重写:OnAuthorization,OnAcitonExecuting OnActionExecuted, OnResultExecuting OnResultExecuted,OnException
2. 使用方式有两种
A.自定义类继承自相应的类或接口,重写方法,作为特性使用
注:
使用方式一:作为Controller或Action的特性来使用
使用方式二:在全局FilterConfig中注册,是过滤器对所有Controller有好用,不需挨个加特性标识
B.在控制器类中重写方法,也可以在一个基类中重写方法 ,让子类继承,这种效果等同于将特性标识加在控制器上
三.使用
1.身份验证过滤器
a.在约束的Action执行前执行
b.重写OnAuthorization方法
c.如果不想使用默认的身份验证方式,需要将base.***删除
d.如果想进行跳转,需要设置上下文对象的Result属性为new RedirectResult(string url);
获取区域名,控制器名,方法名
string strAreaName = filterContext.RouteData.DataTokens["area"].ToString().ToLower();
string strControllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName.ToLower();
string strActionName = filterContext.ActionDescriptor.ActionName.ToLower();
a.当发生异常时,用于进行自定义异步处理,如记录日志、跳转页面
b.使用自定义异常处理,需要在web.config中为system.web添加<customErrors mode="On" />节点
c.重写
OnException
方法,不要禁用base.OnException(filterContext);
d.如果想进行跳转,需要设置上下文对象的Result属性为new RedirectResult(string url);
a.在行为被执行前、后执行的过滤器
b.重写方法OnActionExecuting(行为执行前)
c.重写方法OnActionExecuted(行为执行后)
a.在结果被执行前、后执行的过滤器
b.重写方法OnResultExecuting(结果执行前)
c.重写方法OnResultExecuted(结果执行后)