Asp.Net MVC学习笔记-Filter
Asp.Net MVC的四种过滤器类型:
- ActionFilter(方法过滤器):接口名为[IActionFilter],在控制器方法调用前/后执行
- ResultFilter(结果过滤器):接口名为[IResultFilter],在控制器方法调用完,跳转至view页面前/后执行
- AuthorizationFilter(授权过滤器):接口名为[IauthorizationFilter],所有过滤器中最先执行的
- ExceptionFilter(异常处理过滤器):接口名为[IExceptionFilter],在控制器方法抛出异常时执行
在项目中新建文件夹命名为Filter,创建新的类型时为了遵循约定名称以Attribute结尾。
AuthorizeAttribute
Filter文件夹下创建新类型MyAuthorizeAttribute,继承AuthorizeAttribute类:
/// <summary>
/// 用户权限验证过滤器
/// </summary>
public class MyAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
filterContext.HttpContext.Response.write("Your Authorize");//你自己的权限验证逻辑
filterContext.Result = new RedirectResult("URL");//验证不通过则跳转到指定地址
}
}
对需要验证的类添加[Filter.MyAuthorize]标记,Authoize过滤器是用于全局过滤的,主要做登录验证和权限验证,在App_Start下面的FilterConfig类的RegisterGlobalFilters中添加:
filters.Add(new MyAuthorizeAttribute());
在全局中注册过滤器,则所有控制器的所有Action都会执行这个过滤器。
HandleErrorAttribute
Filter文件夹下创建新类型MyHandleErrorAttribut继承HandleErrorAttribute:
/// <summary> /// 用于捕获action中的未被try{}catch{}捕获的异常 /// </summary> public class MyHandleErrorAttribut : HandleErrorAttribute { public override void OnException(ExceptionContext filterContext) { //1、获取异常对象 Exception ex = filterContext.Exception; string action = HttpContext.Current.Request.CurrentExecutionFilePath;//获取发生异常的acition string msg = "发生错误的Action名称:" + action + ",错误信息:" + ex.Message; //这里对异常进行处理,如保存异常日志等 //2、重定向友好页面 filterContext.Result = new RedirectResult("~/error.html"); //3、 通知MVC框架,现在这个异常已经处理掉 filterContext.ExceptionHandled = true; base.OnException(filterContext); } }
异常处理一般都是放在全局过滤器上面的,只要任意Action报错就会执行过滤器中的代码。修改App_Start下面的FilterConfig的代码:
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new MyAuthorizeAttribute()); filters.Add(new LogHandleErrorAttribut()); } }
这里做个简单的记录做备忘之用。
从别后, 忆相逢, 几会魂梦与汝同。