public async Task <IHttpResponse> HandleRouteAsync(Type controllerType, IInvokeResource resourceInvoker, IApplication httpApp, IHttpRequest routeData, RouteHandlingDelegate continueExecution) { var stopwatch = Stopwatch.StartNew(); var requestId = Guid.NewGuid().ToString("N"); var telemetry = new RequestTelemetry() { Id = requestId, Source = controllerType.Assembly.FullName, Timestamp = DateTimeOffset.UtcNow, Url = routeData.GetAbsoluteUri(), // request.RequestUri, }; #region User / Session var claims = routeData.GetClaims( claimsEnumerable => claimsEnumerable.ToArray(), () => new Claim[] { }, (why) => new Claim[] { }); var sessionIdClaimType = Api.Auth.ClaimEnableSessionAttribute.Type; var sessionIdMaybe = SessionToken.GetClaimIdMaybe(claims, sessionIdClaimType); if (sessionIdMaybe.HasValue) { telemetry.Context.Session.Id = sessionIdMaybe.Value.ToString().ToUpper(); } var accountIdClaimType = EastFive.Api.AppSettings.ActorIdClaimType.ConfigurationString( (accIdCT) => accIdCT, (why) => default); if (accountIdClaimType.HasBlackSpace()) { var accountIdMaybe = SessionToken.GetClaimIdMaybe(claims, accountIdClaimType); if (accountIdMaybe.HasValue) { var accountIdStr = accountIdMaybe.Value.ToString().ToUpper(); telemetry.Context.User.AccountId = accountIdStr; telemetry.Context.User.AuthenticatedUserId = accountIdStr; } } foreach (var claim in claims.Distinct(claim => claim.Type)) { telemetry.Properties.Add($"claim[{claim.Type}]", claim.Value); } #endregion routeData.Properties.Add(HttpRequestMessagePropertyRequestTelemetryKey, telemetry); var response = await continueExecution(controllerType, httpApp, routeData); telemetry.ResponseCode = response.StatusCode.ToString(); if (response.ReasonPhrase.HasBlackSpace()) { telemetry.Properties.AddOrReplace("reason_phrase", response.ReasonPhrase); } telemetry.Success = response.StatusCode.IsSuccess(); #region Method result identfiers if (response.Headers.TryGetValue(Middleware.HeaderStatusType, out string[] statusNames))
public async Task <HttpResponseMessage> HandleRouteAsync(Type controllerType, IApplication httpApp, HttpRequestMessage request, string routeName, RouteHandlingDelegate continueExecution) { var stopwatch = Stopwatch.StartNew(); var requestId = Guid.NewGuid().ToString("N"); var telemetry = new RequestTelemetry() { Id = requestId, Source = "EastFive.Api", Timestamp = DateTimeOffset.UtcNow, Url = request.RequestUri, }; #region User / Session var claims = request.GetClaims( claimsEnumerable => claimsEnumerable.ToArray(), () => new Claim[] { }, (why) => new Claim[] { }); var sessionIdClaimType = BlackBarLabs.Security.ClaimIds.Session; var sessionIdMaybe = SessionToken.GetClaimIdMaybe(claims, sessionIdClaimType); if (sessionIdMaybe.HasValue) { telemetry.Context.Session.Id = sessionIdMaybe.Value.ToString().ToUpper(); } var accountIdClaimType = EastFive.Api.AppSettings.ActorIdClaimType.ConfigurationString( (accIdCT) => accIdCT, (why) => default); if (accountIdClaimType.HasBlackSpace()) { var accountIdMaybe = SessionToken.GetClaimIdMaybe(claims, accountIdClaimType); if (accountIdMaybe.HasValue) { var accountIdStr = accountIdMaybe.Value.ToString().ToUpper(); telemetry.Context.User.AccountId = accountIdStr; telemetry.Context.User.AuthenticatedUserId = accountIdStr; } } foreach (var claim in claims) { telemetry.Properties.Add($"claim[{claim.Type}]", claim.Value); } #endregion request.Properties.Add(HttpRequestMessagePropertyRequestTelemetryKey, telemetry); var response = await continueExecution(controllerType, httpApp, request, routeName); telemetry.ResponseCode = response.StatusCode.ToString(); if (response.ReasonPhrase.HasBlackSpace()) { telemetry.Properties.AddOrReplace("reason_phrase", response.ReasonPhrase); } telemetry.Success = response.IsSuccessStatusCode; #region Method result identfiers if (response.Headers.TryGetValues(HeaderStatusName, out IEnumerable <string> statusNames)) { if (statusNames.Any()) { telemetry.Properties.Add(TelemetryStatusName, statusNames.First()); } } if (response.Headers.TryGetValues(HeaderStatusInstance, out IEnumerable <string> statusInstances)) { if (statusInstances.Any()) { telemetry.Properties.Add(TelemetryStatusInstance, statusInstances.First()); } } #endregion var telemetryClient = AppSettings.ApplicationInsights.InstrumentationKey.LoadTelemetryClient(); telemetry.Duration = stopwatch.Elapsed; telemetryClient.TrackRequest(telemetry); return(response); }