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

ASP.NET MVC学习笔记-----Filter

2013-08-23 23:06 429 查看
Filter类型接口MVC的默认实现Description
AuthorizationIAuthorizationFilterAuthorizeAttribute最先执行,在其他类型的filter和action方法前执行
ActionIActionFilterActionFilterAttribute在action方法执行前和执行后执行
ResultIResultFilterActionFilterAttribute在result执行前和执行后执行
ExceptionIExceptionFilterHandleErrorAttribute在抛出异常时执行,(异常发生在action/result/filter)
 
Authorization Filter
Authorization Filter是所有Filter类型中第一个执行的Filter,它在action方法调用前执行。Authorization Filter需要实现IAuthorizationFilter接口:

public interface IAuthorzationFilter
{
void OnAuthorization(AuthorizationContext context);
}


可以看出,我们要实现Authorization机制的代码就需要放在OnAuthorization方法中,而其参数类型AuthorizationContext继承于ControllerContext,如下所示:

public class AuthorizationContext : ControllerContext
{

public AuthorizationContext();

public AuthorizationContext(ControllerContext controllerContext, ActionDescriptor actionDescriptor);
public virtual ActionDescriptor ActionDescriptor { get; set; }
public ActionResult Result { get; set; }

}


AuthorzationContext额外提供了Result属性和ActionDescriptor属性,result属性表示授权阶段呈现的ActionResult,而ActionDescriptor则包含了当前执行Action的信息。

Asp.net MVC给我们提供了一个IAuthorzationFilter的实现AuthorizeAttribute(没错,它是一个Attribute,继承于FilterAttribute),该Attribute可以应用于Controller和Action, 它包含Roles和Users属性,指定特定的角色和用户才可以授权使用。比如:


public class HomeController : Controller
{
[Authorize(Users = "zhang, zheng", Roles = "admin")]
public ActionResult Index()
{
return View();
}
}


以上代码表示只有用户zhang,zheng并且拥有角色admin的用户才可以被授权执行Index Action。


Exception Filter
当一个未处理异常抛出时,Exception Filter将会被执行。Exception Filter需要实现IExceptionFilter接口:


public interface IExceptionFilter
{
void OnException(ExceptionContext filerContext);
}


ExceptionContext同样继承于ControllerContext,它提供了以下额外的属性:

属性名类型描述
ActionDescriptorActionDescriptor提供当前所执行的Action的信息
ResultActionResultException Filter所呈现的ActionResult
ExceptionException未处理的异常
ExceptionHandledbool表示是否已有其他filter处理过此异常
ExceptionHandled是一个很重要的属性。一般来说,当一个Exception Filter执行时,我们首先需要检查ExceptionHandled属性,如果为true,则表示已有其他filter处理过此异常了,就不需要再次进行处理了,以免覆盖其他filter所解决的Exception。如果为false,则对该Exception进行相应的处理,处理之后将ExceptionHandled属性设置为true。默认的,如果没有Exception Filter将ExceptionHandled属性设置为true,
ASP.NET MVC将使用默认的异常处理,即显示我们经常看到的异常页面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: