ASP.NET MVC过滤器(一)

过滤器可以把附加逻辑注入到MVC框架的请求处理。它们实现了交叉关注。所谓交叉关注是指,可以用于整个应用程序,而又不适合放置在某个局部的位置的功能,否则会打破关注分离模式。

 

MVC有五种类型的过滤器,每种类型能让你在请求处理的不同点上引入逻辑。

过滤器类型

接口

默认实现

描述

认证过滤器

IAuthenticationFilter

N/A

最先运行,在其他任何过滤器或动作方法之前运行,但在授权过滤器之后可以在此运行。

授权过滤器

IAuthorizationFilter

AuthorizeAttribute

在认证之后,其他过滤器或动作方法之前运行。

动作过滤器

IActionFilter

ActionFilterAttribute

在动作方法之前和之后运行

结果过滤器

IResultFilter

ActionFilterAttribute

在动作结果被执行之前和之后运行

异常过滤器

IExceptionFilter

HandleErrorAttribute

仅在一个过滤器,动作方法或动作结果抛出异常时运行。

在MVC框架调用一个动作之前,会首先检测该方法的定义,以查看它是否具有实现上述接口的注解属性。如果有,那么便在请求处理程序的响应点上调用接口所定义的方法。

 

授权过滤器

授权过滤器会执行你的授权策略,以确保动作方法只被已认证用户调用,它有两个属性来指定授权策略:

名称

类型

描述

Users

String

一个逗号分隔的用户名列表,允许这些用户访问这些动作方法

Roles

String

一个逗号分隔的角色列表,为了访问该动作方法,用户至少是角色之一

 

异常过滤器

在调用一个动作方法时,如果抛出未处理的异常,异常过滤器才会运行。

异常过滤器必须实现IExceptionFilter接口,实现该接口需要实现OnException()方法,该方法有一个ExceptionContext类型参数,可以获取控制器和异常的信息,并能控制对异常的处理行为。

其中Result属性可以决定对异常的处理行为,一般传递一个重定向对象跳转到404页面。

ExceptionHandled可以将异常标记为“已处理”,这样就不会显示恐怖的“黄色屏幕”。

 

在实际项目中,我们往往不需要自己创建异常过滤器,因为微软已经创建好了HandleErrorAttribute这个异常处理类。

常用的属性有:ExceptionType通过指定捕获特定的异常,忽略其他异常。

View指定异常页面的视图名称。

1. 在使用异常过滤器前需要在web.config中添加如下属性

<customErrors mode="On" defaultRedirect="/Content/ErrorPage.html"></customErrors>

将mode设置为On是为了在调试期间也能会拦截异常,默认是RemoteOnly,意味开发期间不会拦截异常。

 

2. 运用内建的异常过滤器

[HandleError(ExceptionType = typeof(ArgumentException),View = "ErrorPage")]

public string Delete()

{

     throw new ArgumentException("参数名不正确");

}

这样一旦在方法中出现了ArgumentException,就会跳转到ErrorPage页面

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值