Esempio n. 1
0
        private string TemplateReplace(string template)
        {
            var currentUser = (ICurrentUser)_httpContextAccessor.HttpContext.RequestServices.GetService(typeof(ICurrentUser));

            if (currentUser.Username == null)
            {
                return(template);
            }

            var logTemplates = LinLogTemplate.TemplateParser(template);

            var newTemplate = template;

            foreach (var logTemplate in logTemplates)
            {
                if (!_templateObj.Contains(logTemplate.ClassObj))
                {
                    continue;
                }

                string?item;
                var    flag = false;
                switch (logTemplate.ClassObj)
                {
                case "user":
                    var propertyUser = typeof(CurrentUser).GetProperty(logTemplate.Property,
                                                                       BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase);
                    if (propertyUser == null)
                    {
                        flag = true;
                    }
                    item = propertyUser?.GetValue(currentUser)?.ToString();
                    break;

                case "response":
                    var propertyResponse = typeof(HttpResponse).GetProperty(logTemplate.Property,
                                                                            BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase);
                    if (propertyResponse == null)
                    {
                        flag = true;
                    }
                    item = propertyResponse?.GetValue(_httpContextAccessor.HttpContext.Response)?.ToString();
                    break;

                default:
                    var propertyRequest = typeof(HttpRequest).GetProperty(logTemplate.Property,
                                                                          BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase);
                    if (propertyRequest == null)
                    {
                        flag = true;
                    }
                    item = propertyRequest?.GetValue(_httpContextAccessor.HttpContext.Request)?.ToString();
                    break;
                }

                if (flag)
                {
                    continue;
                }

                newTemplate = newTemplate.Replace(logTemplate.Segment, item);
            }

            return(newTemplate);
        }