public static void GenerateHandlerEvent(string hostName, Guid userId, MessageItem messageItem, ExmEvents exmEvent, DateTime dateTime, string userAgent = null, WhoIsInformation geoData = null, string link = null) { string eventHandler; switch (exmEvent) { case ExmEvents.Open: eventHandler = "RegisterEmailOpened.ashx"; break; case ExmEvents.Unsubscribe: eventHandler = "RedirectUrlPage.aspx"; link = "/sitecore/Unsubscribe.aspx"; break; case ExmEvents.UnsubscribeFromAll: eventHandler = "RedirectUrlPage.aspx"; link = "/sitecore/UnsubscribeFromAll.aspx"; break; case ExmEvents.Click: eventHandler = "RedirectUrlPage.aspx"; break; default: throw new InvalidEnumArgumentException("No such event in ExmEvents"); } var queryStrings = GetQueryParameters(userId, messageItem, link); var encryptedQueryString = QueryStringEncryption.GetDefaultInstance().Encrypt(queryStrings); var parameters = encryptedQueryString.ToQueryString(true); var url = $"{hostName}/sitecore/{eventHandler}{parameters}"; var fakeData = new ExmFakeData { UserAgent = userAgent, RequestTime = dateTime, GeoData = geoData }; RequestUrl(url, fakeData); }
public static void RequestUrl(string url, ExmFakeData fakeData = null) { Pool.Wait(); try { // Don't use IDisposable HttpClient, seems to cause problems with threads var client = new HttpClient(); if (fakeData != null) { if (fakeData.UserAgent != null) { client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", fakeData.UserAgent); } var json = JsonConvert.SerializeObject(fakeData); client.DefaultRequestHeaders.TryAddWithoutValidation("X-Exm-FakeData", json); } client.Timeout = TimeSpan.FromSeconds(120); var res = client.PostAsync(url, new StringContent(string.Empty)).Result; if (!res.IsSuccessStatusCode) { Errors++; } } catch (TaskCanceledException) { Timeouts++; } catch (Exception ex) { Logger.Instance.LogError("ExmEventsGenerator error", ex); Errors++; } finally { Pool.Release(); } }