zoukankan      html  css  js  c++  java
  • ASP.NET MVC过滤器

    在ASP.NET MVC中有个重要特性就是过滤器,使得我们在MVC程序开发中更好的控制浏览器请求的URL,不是每个请求都有响应内容,只有特定得用户才有。园子里关于过滤器的资料也有很多,这篇文章主要是记录自己的学习。

    过滤器类型

    类型 接口 默认实现 执行时间 描述
     Action  IActionFilter ActionFilterAttribute  用于进入行为之前或之后的处理  方法过滤器
     Result  IResultFilter ActionFilterAttribute 用于返回结果的之前或之后的处理  结果过滤器
     Exception  IExceptionFilter

    HandleErrorAttribute

    用于指定一个行为,这个被指定的行为处理某个行为方法或某个控制器里面抛出的异常  异常过滤器
     Authentication  IAuthorizationFilter

    AuthorizeAttribute

    此类型(或过滤器)用于限制进入控制器或控制器的某个行为方法  授权过滤器

    1. Action

    •     在ASP.NET MVC项目中新建文件夹Filter,然后再在文件夹下新建类MyActionFilter,在类中添加命名空间using System.Web.Mvc,再继承自ActionFilterAttribute抽象类,我们按F12我们可以看到抽象类有四个方法,从方法的命名我们不难发现他们的执行顺序。
        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);
        }

       MyActionFilter.cs

        public class MyActionFilter : ActionFilterAttribute
        {
            public override void OnActionExecuted(ActionExecutedContext filterContext)
            {
                filterContext.HttpContext.Response.Write("在Action执行后执行");
                base.OnActionExecuted(filterContext);
            }
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                filterContext.HttpContext.Response.Write("在Action执行前执行");
                base.OnActionExecuting(filterContext);
            }
        }
    • 过滤器可以加在三个地方,第一是控制器上面(可限制控制器下面所有的Action),第二是Action上面(限制指定的Action),第三是全局的过滤器(限制所有的Action)。

    1. 控制器上面  

             

        2.  Action上面

         

       3.   全局过滤器

       在ASP.NET MVC项目中的App_Start下新建类FilterConfig,添加静态方法RegisterGlobalFilters。

       在Global中注册RegisterGlobalFilters方法。

      

    •  运行结果

        

    2. Result

    • Result作用于用于返回视图的之前或之后的处理。

         代码如下: 

            //加载试图后执行
            public override void OnResultExecuted(ResultExecutedContext filterContext)
            {
                filterContext.HttpContext.Response.Write("加载视图后执行OnResultExecuted<br/>");
                base.OnResultExecuted(filterContext);
            }
            //加载试图前执行
            public override void OnResultExecuting(ResultExecutingContext filterContext)
            {
                filterContext.HttpContext.Response.Write("加载视图前执行OnResultExecuting<br/>");
                base.OnResultExecuting(filterContext);
            }

         结果如下:

         

    3. Exception

    •  异常过滤器最好设置成全局过滤器,记录异常日志。

         代码如下:

            /// <summary>
            /// 异常处理过滤器,最好设置成全局过滤器
            /// </summary>
            /// <param name="filterContext"></param>
            public override void OnException(ExceptionContext filterContext)
            {
                //1. 获取异常对象
                Exception ex = filterContext.Exception;
                //2. 记录异常日志
                //3. 调整友好页
                filterContext.Result = new RedirectResult("~/error.html");
                //4. 标记异常已经处理完毕
                filterContext.ExceptionHandled = true;
                base.OnException(filterContext);
            }

    4. Authentication

    •  授权过滤器作用范围在Action之前
            public override void OnAuthorization(AuthorizationContext filterContext)
            {
                filterContext.HttpContext.Response.Write("授权过滤器");
                base.OnAuthorization(filterContext);
            }

     5. 过滤器的执行顺序

  • 相关阅读:
    WebLogic10 & MyEclipse 配置(转)
    java中的接口隔离(ISP)
    java多线程之 wait(),notify(),notifyAll()
    Windows Server 2008 R2终端服务器激活方法
    [zt]PHP+jQuery+Ajax实现用户登录与退出
    USACO Window AreaDFS矩形切割
    eWebEditor在IE8,IE7下所有按钮无效之解决办法
    [zt]【HoorayOS】开源的Web桌面应用框架——安装部署
    javascript Date format(js日期格式化)
    web design
  • 原文地址:https://www.cnblogs.com/liujie2272/p/5363082.html
Copyright © 2011-2022 走看看