public void OnActionExecuting(ActionExecutingContext context) { if (context.HttpContext.Request.Path.StartsWithSegments("/api") || context.HttpContext.Request.Path.StartsWithSegments("/internalapi") || context.HttpContext.Request.Path.StartsWithSegments("/publicapi")) { _layer = "Api"; } else { _layer = "Mvc"; } var request = context.HttpContext.Request; var activity = $"{request.Path}-{request.Method}"; var dict = new Dictionary <string, object>(); foreach (var key in context.RouteData.Values?.Keys) { dict.Add($"RouteData-{key}", (string)context.RouteData.Values[key]); } var details = EnvyWebHelper.GetWebFlogDetail(_product, _layer, activity, context.HttpContext, dict); _tracker = new EnvyPerformanceTracker(details); }
public async Task Invoke(HttpContext context) { try { await _next(context); } catch (Exception ex) { bool isWebApi = context.Request.Path.StartsWithSegments("/api") || context.Request.Path.StartsWithSegments("/internalapi") || context.Request.Path.StartsWithSegments("/publicapi"); if (isWebApi) { context.Response.StatusCode = 500; context.Response.ContentType = "application/json"; EnvyWebHelper.LogWebError("Core", "Api", ex, context); var errorId = Activity.Current?.Id ?? context.TraceIdentifier; var jsonResponse = JsonConvert.SerializeObject(new EnvyErrorResponse { ErrorId = errorId, Message = "Some kind of error happened in the API" }); await context.Response.WriteAsync(jsonResponse, Encoding.UTF8); } else { EnvyWebHelper.LogWebError(_product, _layer, ex, context); PathString originalPath = context.Request.Path; if (_options.ExceptionHandlingPath.HasValue) { context.Request.Path = _options.ExceptionHandlingPath; } context.Response.Clear(); var exceptionHandlerFeature = new ExceptionHandlerFeature() { Error = ex, Path = originalPath.Value, }; context.Features.Set <IExceptionHandlerFeature>(exceptionHandlerFeature); context.Features.Set <IExceptionHandlerPathFeature>(exceptionHandlerFeature); context.Response.StatusCode = 500; context.Response.OnStarting(_clearCacheHeadersDelegate, context.Response); await _options.ExceptionHandler(context); return; } } }