您的位置:首页 > 编程语言 > ASP

Asp.Net MVC过滤器

2016-09-03 21:44 501 查看
在MVC中有如下过滤器

1.AuthorizeAttribute

2.ActionFilterAttribute

3.HandleErrorAttribute

一、首先介绍AuthorizeAttribute,这个就是授权过滤器

1.创建一个类,继承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前后过滤器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: