• Action执行时间过滤器


    public class AccessStatisticsAttribute : ActionFilterAttribute
        {
            /// <summary>
            /// log4net 日志
            /// </summary>
            private static readonly ILog Logger = LogManager.GetLogger(typeof(AccessStatisticsAttribute));
    
            /// <summary>
            /// 该Action对应的权限项名称
            /// </summary>
            private readonly string _actionName;
    
            /// <summary>
            /// 该Action对应的权限项名称
            /// </summary>
            private readonly bool _logResult;
    
            /// <summary>
            /// .ctor
            /// </summary>
            public AccessStatisticsAttribute(string actionName, bool logTheResult = false)
            {
                this._actionName = actionName;
                this._logResult = logTheResult;
            }
    
            /// <summary>
            /// 提供一个入口点用于进行自定义授权检查
            /// </summary>
            /// <param name="filterContext">HTTP 上下文,它封装有关单个 HTTP 请求的所有 HTTP 特定的信息。</param>
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                GetSessionTimer(filterContext).Start();
                base.OnActionExecuting(filterContext);
            }
    
            /// <summary>
            /// OnActionExecuted
            /// </summary>
            /// <param name="filterContext"></param>
            public override void OnActionExecuted(ActionExecutedContext filterContext)
            {
                var stopwatch = GetSessionTimer(filterContext);
                stopwatch.Stop();
                var result = this._logResult ? filterContext.Result.ToJsonNoneFormat() : string.Empty;
    
                if (stopwatch.Elapsed.TotalMilliseconds > ActionHelper.ElapsedMillisecondsLimit)
                {
                    Logger.InfoFormat("OUT : {0} {1} {2}ms {3}s", _actionName, result, (uint)stopwatch.Elapsed.TotalMilliseconds, (uint)stopwatch.Elapsed.TotalSeconds);
                }
    
                base.OnActionExecuted(filterContext);
            }
    
            
            private Stopwatch GetSessionTimer(ControllerContext context, string name = "actionElapse")
            {
                string key = name + "timer";
                if (context.HttpContext.Items.Contains(key))
                {
                    return (Stopwatch)context.HttpContext.Items[key];
                }
    
                var result = new Stopwatch();
                context.HttpContext.Items[key] = result;
                return result;
            }
        }
  • 相关阅读:
    rsync+sersync实现文件同步
    HTTP 响应码
    ipv4和ipv6的区别
    查看linux系统版本信息
    MQ基础知识学习
    自动化测试的框架介绍和选择
    python(目录)
    分布式和集群
    raid 工作模式 raid0 raid1 raid10 raid5
    CentOS Docker安装
  • 原文地址:https://www.cnblogs.com/zhshlimi/p/8413860.html
Copyright © 2020-2023  润新知