• .NET MVC获取请求参数输出到日志


    方法

        public class MyActionFilter : IActionFilter
        {
            public static readonly log4net.ILog logger = log4net.LogManager.GetLogger("InfoLog");
            /// <summary>
            /// 加载视图后执行
            /// </summary>
            /// <param name="filterContext"></param>
            public void OnActionExecuted(ActionExecutedContext filterContext)
            {
                //throw new NotImplementedException();
            }
            /// <summary>
            /// 加载视图前执行
            /// </summary>
            /// <param name="filterContext"></param>
            public void OnActionExecuting(ActionExecutingContext filterContext)
            {
                var Controller = filterContext.ActionDescriptor.ControllerDescriptor.ControllerType;
                var action = GetMethodInfoOrNull(filterContext.ActionDescriptor).Name;
                var Parameters = ConvertArgumentsToJson(filterContext.ActionParameters);
                logger.Info($"
    控制器:{Controller}
    方法:{action}
    参数:{Parameters}
    IP:{GetIP()}" + "
    ");
                //throw new NotImplementedException();
            }
            public static MethodInfo GetMethodInfoOrNull(ActionDescriptor actionDescriptor)
            {
                if (actionDescriptor is ReflectedActionDescriptor)
                {
                    return (actionDescriptor as ReflectedActionDescriptor).MethodInfo;
                }
    
                if (actionDescriptor is ReflectedAsyncActionDescriptor)
                {
                    return (actionDescriptor as ReflectedAsyncActionDescriptor).MethodInfo;
                }
    
                if (actionDescriptor is TaskAsyncActionDescriptor)
                {
                    return (actionDescriptor as TaskAsyncActionDescriptor).MethodInfo;
                }
    
                return null;
            }
            private string ConvertArgumentsToJson(IDictionary<string, object> arguments)
            {
                try
                {
                    if (arguments.Count <= 0)
                    {
                        return "{}";
                    }
    
                    var dictionary = new Dictionary<string, object>();
    
                    foreach (var argument in arguments)
                    {
    
                        dictionary[argument.Key] = argument.Value;
    
                    }
    
                    return Serialize(dictionary);
                }
                catch (Exception ex)
                {
                    return "{}";
                }
            }
            public string Serialize(object obj)
            {
                return JsonConvert.SerializeObject(obj);
            }   /// <summary>
            /// 获取IP
            /// </summary>
            /// <returns></returns>
            private string GetIP()
            {
                string ip = string.Empty;
                if (!string.IsNullOrEmpty(System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"]))
                    ip = Convert.ToString(System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]);
                if (string.IsNullOrEmpty(ip))
                    ip = Convert.ToString(System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]);
                return ip;
            }
        }
  • 相关阅读:
    java cp命令
    Ubuntu相关IP配置(转)
    (转)Linux操作系统下VMware的多网卡桥接转换
    Linux问题FAQ1
    hadoop运行常见问题FAQ
    hadoop运行故障问题解决1——datanode节点启动后自动关闭
    Java程序设计9——泛型
    一道灵活的css笔试题
    inherit与auto
    再谈visibility:hidden和display:none
  • 原文地址:https://www.cnblogs.com/wangyinlon/p/11445587.html
Copyright © 2020-2023  润新知