加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何为所有控制器编写动作过滤器

发布时间:2020-12-16 04:03:05 所属栏目:asp.Net 来源:网络整理
导读:这是一个smaple动作过滤器,我们知道当我们编写动作过滤器时,我们需要像这样装饰控制器来为任何特定的控制器实现它,但是我想知道有没有办法编写动作过滤器,它将适用于所有控制器,我不需要用动作过滤器属性来装饰控制器.任何的想法. [LogActionFilter]public c
这是一个smaple动作过滤器,我们知道当我们编写动作过滤器时,我们需要像这样装饰控制器来为任何特定的控制器实现它,但是我想知道有没有办法编写动作过滤器,它将适用于所有控制器,我不需要用动作过滤器属性来装饰控制器.任何的想法.
[LogActionFilter]
public class HomeController : Controller
{}

public class LogActionFilter : ActionFilterAttribute

     {
          public override void OnActionExecuting(ActionExecutingContext filterContext)
          {
               Log("OnActionExecuting",filterContext.RouteData);       
          }

          public override void OnActionExecuted(ActionExecutedContext filterContext)
          {
               Log("OnActionExecuted",filterContext.RouteData);       
          }

          private void Log(string methodName,RouteData routeData)
          {
               var controllerName = routeData.Values["controller"];
               var actionName = routeData.Values["action"];
               var message = String.Format("{0} controller:{1} action:{2}",methodName,controllerName,actionName);
               Debug.WriteLine(message,"Action Filter Log");
          }

     }

解决方法

public class LogActionFilterAttribute : IActionFilter
    {
        public void OnActionExecuted(ActionExecutedContext filterContext)
        {
            Log("OnActionExecuted",filterContext.RouteData);    
        }

        public void OnActionExecuting(ActionExecutingContext filterContext)
        {
            Log("OnActionExecuting",filterContext.RouteData);  
        }

        private void Log(string methodName,RouteData routeData)
        {
            var controllerName = routeData.Values["controller"];
            var actionName = routeData.Values["action"];
            var message = String.Format("{0} controller:{1} action:{2}",actionName);
            Debug.WriteLine(message,"Action Filter Log");
        }
    }

public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            GlobalFilters.Filters.Add(new LogActionFilterAttribute());
        }
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读