public Task HandleAsync(ExceptionContext context) { var category = _exceptionCategorizer.Categorizer(context.Exception); dynamic response = new ExpandoObject(); response.System = new Dictionary<string, string>(); response.System["Tracking Id"] = Guid.NewGuid().ToString(); response.System["Timestamp"] = DateTimeOffset.Now.ToString(); response.System["Message"] = category.ErrorMessage; response.System["Execution"] = "Global"; if(context.Context.Request != null) { response.System["Execution"] = "Request"; response.Developer = new Dictionary<string, string>(); response.Developer["RequestMethod"] = context.Context.Request.Method; response.Developer["Uri"] = $"{context.Context.Request.Scheme}:{context.Context.Request.Host}{context.Context.Request.Path}"; response.Developer["ExceptionType"] = context.Exception.GetType().FullName; response.Developer["StackTrace"] = context.Exception.StackTrace.Trim(); } context.Context.Items["exception.category"] = category; context.Context.Items["exception.response"] = response; return Task.FromResult(0); }
/// <summary> /// Intercepts the specified context. /// </summary> /// <param name="context">The context.</param> /// <returns></returns> /// <exception cref="System.AggregateException"></exception> async Task IExceptionInterceptManager.InterceptAsync(HttpContext context) { var feature = context.Features.Get<IExceptionHandlerFeature>(); var exceptionContext = new ExceptionContext(context, feature?.Error); var handlerExecutionExceptions = new List<Exception>(); try { foreach (var handlers in _exceptionIntercepts) { try { await handlers.HandleAsync(exceptionContext); } catch (Exception ex) { handlerExecutionExceptions.Add(ex); } } } catch(Exception ex) { handlerExecutionExceptions.Add(ex); } finally { if (handlerExecutionExceptions.Any()) { throw new AggregateException(handlerExecutionExceptions); } } }
public async Task HandleAsync(ExceptionContext context) { var category = (ExceptionCategory)context.Context.Items["exception.category"]; dynamic response = context.Context.Items["exception.response"]; dynamic finalResponse = category.DeveloperMode ? response : response.System; context.Context.Response.StatusCode = (int)category.HttpStatus; context.Context.Response.ContentType = "application/json"; await context.Context.Response.WriteAsync((string)JsonConvert.SerializeObject(finalResponse)); }
public Task HandleAsync(ExceptionContext context) { var category = (ExceptionCategory)context.Context.Items["exception.category"]; if (category.Category == ExceptionCategoryType.Unhandled) { dynamic response = context.Context.Items["exception.response"]; // log whatever to the JIRA for production issue tracking } return Task.FromResult(0); }
public Task HandleAsync(ExceptionContext context) { var category = (ExceptionCategory)context.Context.Items["exception.category"]; if (category.Category == ExceptionCategoryType.Unhandled) { dynamic response = context.Context.Items["exception.response"]; // log whatever to the Database // Note: Application Insights may be a more attractive analytical logger than rolling your own. } return Task.FromResult(0); }
public async Task HandleAsync(ExceptionContext context) { // sample response var response = new { TicketId = Guid.NewGuid(), Timestamp = DateTime.UtcNow.ToString(), Message = "You are unauthorized to access this resource." }; context.Context.Response.StatusCode = (int)HttpStatusCode.Forbidden; context.Context.Response.ContentType = "application/json"; await context.Context.Response.WriteAsync(JsonConvert.SerializeObject(response)); }
public Task HandleAsync(ExceptionContext context) { _logger.LogDebug($"Logging '{context.Exception?.Message}' from '{this.GetType().FullName}'."); return Task.FromResult(0); }
public Task HandleAsync(ExceptionContext context) { return Task.FromResult(0); }