diff --git a/WEB/Src/Web/Web/AccountIdActivityProcessor.cs b/WEB/Src/Web/Web/AccountIdActivityProcessor.cs index 9b23c6b6f..e2786bb4f 100644 --- a/WEB/Src/Web/Web/AccountIdActivityProcessor.cs +++ b/WEB/Src/Web/Web/AccountIdActivityProcessor.cs @@ -33,7 +33,8 @@ public override void OnEnd(Activity activity) } var context = HttpContext.Current; - if (context == null) + var request = context.GetRequest(); + if (request == null) { return; } @@ -42,7 +43,7 @@ public override void OnEnd(Activity activity) var existingAccountId = activity.GetTagItem("enduser.id"); if (existingAccountId == null || string.IsNullOrEmpty(existingAccountId.ToString())) { - var authUserCookie = context.Request.UnvalidatedGetCookie(RequestTrackingConstants.WebAuthenticatedUserCookieName); + var authUserCookie = request.UnvalidatedGetCookie(RequestTrackingConstants.WebAuthenticatedUserCookieName); if (authUserCookie != null && !string.IsNullOrEmpty(authUserCookie.Value)) { var authUserCookieString = HttpUtility.UrlDecode(authUserCookie.Value); diff --git a/WEB/Src/Web/Web/AuthenticatedUserIdActivityProcessor.cs b/WEB/Src/Web/Web/AuthenticatedUserIdActivityProcessor.cs index d5118c688..f340cdc69 100644 --- a/WEB/Src/Web/Web/AuthenticatedUserIdActivityProcessor.cs +++ b/WEB/Src/Web/Web/AuthenticatedUserIdActivityProcessor.cs @@ -31,7 +31,8 @@ public override void OnEnd(Activity activity) } var context = HttpContext.Current; - if (context == null) + var request = context.GetRequest(); + if (request == null) { return; } @@ -40,7 +41,7 @@ public override void OnEnd(Activity activity) var existingUserId = activity.GetTagItem("enduser.id"); if (existingUserId == null || string.IsNullOrEmpty(existingUserId.ToString())) { - var authUserCookie = context.Request.UnvalidatedGetCookie(RequestTrackingConstants.WebAuthenticatedUserCookieName); + var authUserCookie = request.UnvalidatedGetCookie(RequestTrackingConstants.WebAuthenticatedUserCookieName); if (authUserCookie != null && !string.IsNullOrEmpty(authUserCookie.Value)) { var authUserCookieString = HttpUtility.UrlDecode(authUserCookie.Value); diff --git a/WEB/Src/Web/Web/ClientIpHeaderActivityProcessor.cs b/WEB/Src/Web/Web/ClientIpHeaderActivityProcessor.cs index 686bd7cc7..437bee5ca 100644 --- a/WEB/Src/Web/Web/ClientIpHeaderActivityProcessor.cs +++ b/WEB/Src/Web/Web/ClientIpHeaderActivityProcessor.cs @@ -77,7 +77,8 @@ public override void OnEnd(Activity activity) } var context = HttpContext.Current; - if (context == null) + var request = context.GetRequest(); + if (request == null) { return; } @@ -90,10 +91,10 @@ public override void OnEnd(Activity activity) foreach (var clientIpHeaderName in this.HeaderNames) { // Try Unvalidated first, fall back to regular Headers for test environments - var clientIpsFromHeader = context.Request.UnvalidatedGetHeader(clientIpHeaderName); + var clientIpsFromHeader = request.UnvalidatedGetHeader(clientIpHeaderName); if (string.IsNullOrWhiteSpace(clientIpsFromHeader)) { - clientIpsFromHeader = context.Request.Headers[clientIpHeaderName]; + clientIpsFromHeader = request.Headers[clientIpHeaderName]; } if (!string.IsNullOrWhiteSpace(clientIpsFromHeader)) @@ -111,7 +112,7 @@ public override void OnEnd(Activity activity) if (string.IsNullOrEmpty(resultIp)) { - resultIp = context.Request.GetUserHostAddress(); + resultIp = request.GetUserHostAddress(); } if (!string.IsNullOrEmpty(resultIp)) diff --git a/WEB/Src/Web/Web/Implementation/HttpContextExtensions.cs b/WEB/Src/Web/Web/Implementation/HttpContextExtensions.cs index 5bb94c5a8..f0e921070 100644 --- a/WEB/Src/Web/Web/Implementation/HttpContextExtensions.cs +++ b/WEB/Src/Web/Web/Implementation/HttpContextExtensions.cs @@ -11,12 +11,28 @@ internal static class HttpContextExtensions { /// /// Gets the HttpRequest from the HttpContext. + /// Returns null if no request is available (e.g., when called outside of a + /// request context such as during Application_Start), in which case + /// throws . /// /// The HttpContext. - /// The HttpRequest. + /// The HttpRequest, or null if not available. public static HttpRequest GetRequest(this HttpContext context) { - return context?.Request; + if (context == null) + { + return null; + } + + try + { + return context.Request; + } + catch (HttpException) + { + // "Request is not available in this context" — e.g., Application_Start. + return null; + } } /// @@ -26,12 +42,12 @@ public static HttpRequest GetRequest(this HttpContext context) /// The request name in format "VERB Controller/Action" or "VERB Path". public static string CreateRequestNamePrivate(this HttpContext context) { - if (context?.Request == null) + var request = context.GetRequest(); + if (request == null) { return string.Empty; } - var request = context.Request; string verb = request.HttpMethod ?? "GET"; // Try to get controller and action from route data diff --git a/WEB/Src/Web/Web/SessionActivityProcessor.cs b/WEB/Src/Web/Web/SessionActivityProcessor.cs index 594d4d892..b067dce4f 100644 --- a/WEB/Src/Web/Web/SessionActivityProcessor.cs +++ b/WEB/Src/Web/Web/SessionActivityProcessor.cs @@ -35,7 +35,8 @@ public override void OnEnd(Activity activity) } var context = HttpContext.Current; - if (context == null) + var request = context.GetRequest(); + if (request == null) { return; } @@ -45,7 +46,7 @@ public override void OnEnd(Activity activity) if (existingSessionId == null || string.IsNullOrEmpty(existingSessionId.ToString())) { // Try Unvalidated first, fall back to regular Cookies for test environments - var sessionCookie = context.Request.UnvalidatedGetCookie(WebSessionCookieName) ?? context.Request.Cookies[WebSessionCookieName]; + var sessionCookie = request.UnvalidatedGetCookie(WebSessionCookieName) ?? request.Cookies[WebSessionCookieName]; if (sessionCookie != null && !string.IsNullOrWhiteSpace(sessionCookie.Value)) { var parts = sessionCookie.Value.Split('|'); diff --git a/WEB/Src/Web/Web/UserActivityProcessor.cs b/WEB/Src/Web/Web/UserActivityProcessor.cs index c07853a7e..58bc86d27 100644 --- a/WEB/Src/Web/Web/UserActivityProcessor.cs +++ b/WEB/Src/Web/Web/UserActivityProcessor.cs @@ -33,7 +33,8 @@ public override void OnEnd(Activity activity) } var context = HttpContext.Current; - if (context == null) + var request = context.GetRequest(); + if (request == null) { return; } @@ -43,7 +44,7 @@ public override void OnEnd(Activity activity) if (existingUserId == null || string.IsNullOrEmpty(existingUserId.ToString())) { // Try Unvalidated first, fall back to regular Cookies for test environments - var userCookie = context.Request.UnvalidatedGetCookie(WebUserCookieName) ?? context.Request.Cookies[WebUserCookieName]; + var userCookie = request.UnvalidatedGetCookie(WebUserCookieName) ?? request.Cookies[WebUserCookieName]; if (userCookie != null && !string.IsNullOrEmpty(userCookie.Value)) { var cookieParts = userCookie.Value.Split('|');