public void Prepare(SendEventBase eventObj) { try { // Если UserAgent не указан, то не будем ничего делать, // это либо роботы, либо псевдо-хакеры // Игнорируем также проверки от самого Zidium if (HttpContext.Current != null) { var userAgent = HttpContext.Current.Request.UserAgent; if (string.IsNullOrEmpty(userAgent) || string.Equals(userAgent, "Zidium", StringComparison.OrdinalIgnoreCase) || UserAgentHelper.IsBot(userAgent)) { eventObj.Ignore = true; return; } } } catch { // Request доступен не для всех событий } HttpContextHelper.SetProperties(eventObj.Properties); var user = UserHelper.CurrentUser; if (user != null) { eventObj.Properties.Set("UserId", user.Id); eventObj.Properties.Set("UserLogin", user.Login); eventObj.Properties.Set("UserName", user.Name); eventObj.Properties.Set("AccountId", user.AccountId); eventObj.Properties.Set("AccountName", user.AccountName); } // Игнорирование некоторых ошибок if (eventObj.EventCategory == SendEventCategory.ApplicationError) { if ( // Несуществующий метод контроллера eventObj.TypeSystemName.StartsWith("HttpException в Controller.HandleUnknownAction(String)", StringComparison.OrdinalIgnoreCase) || eventObj.TypeSystemName.StartsWith("HttpException at Controller.HandleUnknownAction(String)", StringComparison.OrdinalIgnoreCase) || // Несуществующий контроллер eventObj.TypeSystemName.StartsWith("HttpException в DefaultControllerFactory.GetControllerInstance(RequestContext, Type)", StringComparison.OrdinalIgnoreCase) || eventObj.TypeSystemName.StartsWith("HttpException at DefaultControllerFactory.GetControllerInstance(RequestContext, Type)", StringComparison.OrdinalIgnoreCase) || // Неверный токен eventObj.TypeSystemName.StartsWith("HttpAntiForgeryException", StringComparison.OrdinalIgnoreCase) || // Недопустимые символы в Url eventObj.TypeSystemName.IndexOf("HttpRequest.ValidateInputIfRequiredByConfig()", StringComparison.OrdinalIgnoreCase) >= 0 ) { eventObj.Ignore = true; } } }
protected virtual void ProcessUserAgentTag(ActionExecutingContext filterContext) { if (filterContext == null) { return; } if (filterContext.RequestContext == null) { return; } var request = filterContext.RequestContext.HttpContext.Request; if (request.IsLocal) { // чтобы не мусорить из студии return; } var tag = request.Cookies["uat"]; if (tag == null) { return; } Guid userAgentTagGuid; if (Guid.TryParse(tag.Value, out userAgentTagGuid) == false) { tag.Expires = DateTime.Now.AddDays(-10); return; } // если это бот if (UserAgentHelper.IsBot(request.UserAgent)) { return; } // установим время жизни if (tag.Expires.Year < 2030) { tag.Expires = new DateTime(2030, 1, 1); } // обновим userAgentTagId логина if (CurrentUser != null) { var cookieUserAgentTagValue = tag.Value; var sessionKey = "userAgentTagId"; var sessionValue = Session[sessionKey] as string; if (sessionValue != cookieUserAgentTagValue) { Session[sessionKey] = cookieUserAgentTagValue; ConfigDbServicesHelper.GetLoginService().UpdateUserAgentTag(CurrentUser.Id, userAgentTagGuid); } } }