怎样写操作筛选器的所有控制器 [英] How to write action filter for all controller

查看:122
本文介绍了怎样写操作筛选器的所有控制器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这里是一个smaple动作过滤器,我们知道,当我们写操作的过滤网那么我们就需要装点控制器这样的方式来实现它的任何特定的控制器,但说我想知道有没有什么办法来写动作过滤器将所有的控制器工作,我并不需要装饰用行动过滤属性控制器。任何想法。

  [LogActionFilter]
公共类HomeController的:控制器
{}公共类LogActionFilter:ActionFilterAttribute     {
          公共覆盖无效OnActionExecuting(ActionExecutingContext filterContext)
          {
               日志(OnActionExecuting,filterContext.RouteData);
          }          公共覆盖无效OnActionExecuted(ActionExecutedContext filterContext)
          {
               日志(OnActionExecuted,filterContext.RouteData);
          }          私人无效日志(字符串methodName中,的RouteData的RouteData)
          {
               VAR controllerName = routeData.Values​​ [控制器];
               VAR actionName = routeData.Values​​ [行动];
               VAR消息=的String.Format({0}控制器:{1}行动:{2},方法名,controllerName,actionName);
               的Debug.WriteLine(消息,行动过滤日志);
          }     }


解决方案

 公共类LogActionFilterAttribute:IActionFilter
    {
        公共无效OnActionExecuted(ActionExecutedContext filterContext)
        {
            日志(OnActionExecuted,filterContext.RouteData);
        }        公共无效OnActionExecuting(ActionExecutingContext filterContext)
        {
            日志(OnActionExecuting,filterContext.RouteData);
        }        私人无效日志(字符串methodName中,的RouteData的RouteData)
        {
            VAR controllerName = routeData.Values​​ [控制器];
            VAR actionName = routeData.Values​​ [行动];
            VAR消息=的String.Format({0}控制器:{1}行动:{2},方法名,controllerName,actionName);
            的Debug.WriteLine(消息,行动过滤日志);
        }
    }公共类MvcApplication:System.Web.HttpApplication
    {
        保护无效的Application_Start()
        {
            GlobalFilters.Filters.Add(新LogActionFilterAttribute());
        }
    }

here is a smaple action filter and we know that when we write action filter then we need to decorate controller like this way to implement it for any specific controller but say i like to know that is there any way to write action filter which will work for all controller and i do not need to decorate controller with action filter attribute. any idea.

[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}", methodName, controllerName, actionName);
            Debug.WriteLine(message, "Action Filter Log");
        }
    }

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

这篇关于怎样写操作筛选器的所有控制器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆