zoukankan      html  css  js  c++  java
  • .net 中的 ActionFilterAttribute

    1.

    //表示所有操作-筛选器特性的基类。
        [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
        public abstract class ActionFilterAttribute : FilterAttribute, IActionFilter, IResultFilter
        {
            protected ActionFilterAttribute();
            //    在Action执行之后由 MVC 框架调用。
            public virtual void OnActionExecuted(ActionExecutedContext filterContext);
            //     在Action执行之前由 MVC 框架调用。
            public virtual void OnActionExecuting(ActionExecutingContext filterContext);
            //     在执行Result后由 MVC 框架调用。
            public virtual void OnResultExecuted(ResultExecutedContext filterContext);
            //     在执行Result之前由 MVC 框架调用。
            public virtual void OnResultExecuting(ResultExecutingContext filterContext);
        }

    1.2 实例代码

        [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)]
        public class AuthorizeFilterAttribute : ActionFilterAttribute
        {
            #region Methods
    
            /// <summary>
            /// 在执行操作方法后由 ASP.NET MVC 框架调用。
            /// </summary>
            /// <param name="filterContext"></param>
            public override void OnActionExecuted(ActionExecutedContext filterContext)
            {
                base.OnActionExecuted(filterContext);
            }
    
            /// <summary>
            /// 在执行操作方法之前由 ASP.NET MVC 框架调用。
            /// </summary>
            /// <param name="filterContext"></param>
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
          base.OnActionExecuting(filterContext);
            }
    
            /// <summary>
            ///  OnResultExecuted 在执行操作结果后由 ASP.NET MVC 框架调用。
            /// </summary>
            /// <param name="filterContext"></param>
            public override void OnResultExecuted(ResultExecutedContext filterContext)
            {
                base.OnResultExecuted(filterContext);
            }
    
            /// <summary>
            /// OnResultExecuting 在执行操作结果之前由 ASP.NET MVC 框架调用。
            /// </summary>
            /// <param name="filterContext"></param>
            public override void OnResultExecuting(ResultExecutingContext filterContext)
            {
                base.OnResultExecuting(filterContext);
            }
    
            #endregion Methods
        }

    2.后在调用过滤器的时候,添加上该参数,Controller代码如下:

    [Filter(Message="刘备")]  //参数给上
            public ActionResult Index()
            {
                return View();
            }

    如果标签打到Controller上的话,TestFilterAttributeFilter将作用到Controller下的所有的Action。

    3.有时我们想有些公共的方法需要每个Action都执行,但是又不想再每一个Controller上都打上Action标签,

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
            {
                filters.Add(new HandleErrorAttribute());
                //注册全局过滤器
                filters.Add(new TestFilterAttribute() { Message="全局"});
            }
  • 相关阅读:
    学生管理系统简化版
    图形用户界面编程——事件驱动编程
    图形界面编程
    集合框架
    多线程编程
    反射
    相关类
    异常(4.13)
    接口
    锁!代码锁
  • 原文地址:https://www.cnblogs.com/leolzi/p/12866991.html
Copyright © 2011-2022 走看看