首页 > 编程 > .NET > 正文

ASP.NET mvc4中的过滤器的使用

2024-07-10 12:49:16
字体:
来源:转载
供稿:网友

mvc4中的过滤器

过滤器(Filter)把附加逻辑注入到MVC框架的请求处理。实现了交叉关注。

交叉关注:用于整个应用程序,又不适合放在某个局部位置的功能。

过滤器是.NET的注解属性(Attribute),它们对请求处理管道添加了额外的步骤。

注解属性是派生于System.Attribute的特殊的.NET类。

可以被附加到类、方法、属性、字段等代码元素上。其目的是把附加信息嵌入到已编译的代码中,以便在运行时读回这些信息。

过滤器的基本类型:

过滤器类型

接口

默认实现

描述

Authorization

IAuthorizationFilter

AuthorizationAttribute

最先运行

Action

IActionFilter

ActionFilterAttribute

在动作方法前后运行

Result

IResultFilter

ActionResultAttribute

在动作结果被执行前后

Exception

IExceptionFilter

HandlerErrorAttribute

仅在过滤器、动作发生异常时

授权过滤器:IAuthorizationFilter

namespace System.Web.Mvc{  // 摘要:定义授权筛选器所需的方法。  public interface IAuthorizationFilter{    // 摘要:在需要授权时调用。    // 参数:filterContext:筛选器上下文。    void OnAuthorization(AuthorizationContext filterContext);  }}

注意:

直接实现接口其实是一件非常危险的事;因此创建一个自定义AuthorizeAttribute子类,再实现授权代码比较容易。

public class CustomAuthAttribute:AuthorizeAttribute{    /// <summary>    /// 是否对请求进行授权访问的方式    /// </summary>    /// <param name="httpContext">对请求信息进行访问的方法</param>    protected override bool AuthorizeCore(HttpContextBase httpContext){      return base.AuthorizeCore(httpContext);    }}

直接实现IAuthorizationFilter接口的主要原因是为了获取对传递给OnAuthorization()的AuthorizationContext的访问,通过它可以获得更广泛的信息(路由细节、当前控制器和动作方法信息)。使用接口的方式不仅有安全风险且让授权注解属性中建立的逻辑与控制器紧密的耦合在一起,破坏关注分离,不便于维护。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表