码迷,mamicode.com
首页 > Web开发 > 详细

MVC中的筛选器

时间:2015-08-31 21:43:52      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

    在 ASP.NET MVC 中,控制器将定义一些操作方法,这些操作方法与可能的用户交互(如单击链接或提交窗体)之间通常具有一一对应关系。例如,当用户单击链接时,会将请求路由到指定的控制器,然后调用对应的操作方法。 例如操作完成后你要产生日志、语言筛选、等其他动态操作。

筛选器的由来及用途 

    有时,您需要在调用操作方法之前或运行操作方法之后执行逻辑。

    为了对此提供支持,ASP.NET MVC 提供了筛选器。筛选器是自定义类,可提供用于向控制器操作方法添加操作前行为和操作后行为的声明性和编程性手段。

    操作筛选器的可能用途与能够应用它们的操作一样种类繁多。 操作筛选器的某些可能用途包括:

    ·日志记录,目的是跟踪用户交互。

    ·“反图像攫取”,用于防止在自己网站之外的网页中加载图像。

    ·爬网程序筛选,用于根据浏览器用户代理来更改应用程序行为。

    ·本地化,用于设定区域设置。

    ·动态操作,用于将操作注入到控制器中。

ASP.NET MVC 筛选器的类型

   ASP.NET MVC 框架支持四种不同类型的筛选器:

   1.授权筛选器 — — 实现的 IAuthorizationFilter 属性。

<span style="font-family:KaiTi_GB2312;font-size:18px;">namespace System.Web.Mvc
{
    // 摘要:
    //     定义授权筛选器所需的方法。
    public interface IAuthorizationFilter
    {
        // 摘要:
        //     在需要授权时调用。
        //
        // 参数:
        //   filterContext:
        //     筛选器上下文。
        void OnAuthorization(AuthorizationContext filterContext);
    }
}</span>
   2.操作筛选器 — — 实现的 IActionFilter 属性。

<span style="font-family:KaiTi_GB2312;font-size:18px;">namespace System.Web.Mvc
{
    public interface IActionFilter
    {
        void OnActionExecuted(ActionExecutedContext filterContext);
        void OnActionExecuting(ActionExecutingContext filterContext);
    }
}</span>
   3.结果筛选器 — — 实现的 IResultFilter 属性。

<span style="font-family:KaiTi_GB2312;font-size:18px;">namespace System.Web.Mvc
{
    public interface IResultFilter
    {
        void OnResultExecuted(ResultExecutedContext filterContext);
        void OnResultExecuting(ResultExecutingContext filterContext);
    }
}</span>
   4.异常筛选器 — — 实现的 IExceptionFilter 属性。

<span style="font-family:KaiTi_GB2312;font-size:18px;">namespace System.Web.Mvc
{
    public interface IExceptionFilter
    {
        void OnException(ExceptionContext filterContext);
    }
}</span>

    筛选器的执行上面列出的顺序。 例如,授权筛选器将总是在操作筛选器之前执行,异常筛选器将始终执行后每个其他类型的筛选器。

    授权筛选器用于实现身份验证和授权的控制器操作。例如,授权筛选器是一个示例授权筛选器。

操作筛选器包含执行之前和之后的控制器操作执行的逻辑。你可以使用操作筛选器,例如,修改控制器操作返回的视图数据。

    结果筛选器包含的逻辑,执行之前和之后执行视图结果。例如,您可能想要修改视图结果右视图呈现到浏览器之前。

    异常筛选器筛选器运行的最后一个类型。您可以使用异常筛选器来处理您的控制器操作或控制器操作结果由引发的错误。 此外可以使用异常筛选器来记录错误。

    每种不同类型的筛选器按特定的顺序执行。如果你想要控制在其中执行相同类型的筛选器的顺序你可以设置一个筛选器的 Order 属性。

    所有操作筛选器的基类是 System.Web.Mvc.FilterAttribute  类。 如果您想要执行特定类型的筛选器,然后,您需要创建一个类,从筛选器基类继承并实现一个或更多的 IAuthorizationFilter 、   IActionFilter、 IResultFilter 或ExceptionFilter 接口

    为了使您更轻松地实现自定义操作筛选器,ASP.NET MVC 框架包括 ActionFilterAttribute 的基类。此类实现的 IActionFilter 和 IResultFilter 接口,并从 Filter 的类继承。

    这里的术语不是完全一致的。 从技术上讲,从 ActionFilterAttribute 的类继承的类是操作筛选器和结果筛选器。  

ActionFilterAttribute类的基类方法:

   ActionFilterAttribute 类的基类具有下列方法,您可以重写:

  • OnActionExecuting — — 控制器中的操作执行之前调用此方法。
  • OnActionExecuted — — 控制器中的操作执行后调用此方法。
  • OnResultExecuting — — 控制器操作结果执行之前调用此方法。
  • OnResultExecuted — — 这种方法称为后执行的控制器操作结果。
<span style="font-family:KaiTi_GB2312;font-size:18px;">namespace System.Web.Mvc
{
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
    public abstract class ActionFilterAttribute : FilterAttribute, IActionFilter, IResultFilter
    {
        protected ActionFilterAttribute();

        public virtual void OnActionExecuted(ActionExecutedContext filterContext);
        public virtual void OnActionExecuting(ActionExecutingContext filterContext);
        public virtual void OnResultExecuted(ResultExecutedContext filterContext);
        public virtual void OnResultExecuting(ResultExecutingContext filterContext);
    }
}</span>
    有了筛选器我们的程序变得完美了,权限、操作、响应、异常这一系列的问题都完全被我们自己掌控,成为我们自己的规则,可控性更高。

    其实这些就是AOP思想的体现,而MVC自带了filter可以实现日志功能,后面我们会详细讲述怎样实现。

版权声明:本文为博主原创文章,未经博主允许不得转载。

MVC中的筛选器

标签:

原文地址:http://blog.csdn.net/gaibian0823/article/details/48139133

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!