Beispiel #1
0
 Task <ProblemDetails> IExceptionHandler <TException> .Handle(TException exception, ExceptionHandlerContext context)
 {
     Log(exception, context);
     return(Handle(exception, context));
 }
Beispiel #2
0
 /// <summary>
 /// Handles an exception of <typeparamref name="TException"/>.
 /// </summary>
 /// <param name="exception">Exception to handle.</param>
 /// <param name="context">Context information.</param>
 /// <returns>A machine-readable format for specifying errors in HTTP API responses based on https://tools.ietf.org/html/rfc7807. </returns>
 public abstract Task <ProblemDetails> Handle(TException exception, ExceptionHandlerContext context);
Beispiel #3
0
 /// <summary>
 /// Logs exception through ILogger.LogError.
 /// </summary>
 /// <param name="exception">Exception to log</param>
 /// <param name="context">Context information.</param>
 protected virtual void Log(TException exception, ExceptionHandlerContext context)
 {
     Logger.LogError(exception, "{TraceId}: An unexpected error occurred.", context.TraceId);
 }
Beispiel #4
0
        private async Task <ProblemDetails> InvokeHandler(object exceptionHandler, Exception exception, Type exceptionType, ExceptionHandlerContext handlerContext)
        {
            try
            {
                return(await(Task <ProblemDetails>) InvokeGenericHandlerMethodInfo
                       .MakeGenericMethod(exceptionType)
                       .Invoke(null, new[] { exceptionHandler, exception, handlerContext }));
            }
            catch (Exception e)
            {
                var handlerType = exceptionHandler.GetType();
                _logger?.LogError(e, $"Handler of type {handlerType.FullName} threw an unexpected error. " +
                                  "Exception handler middleware will not handle this exception.");
            }

            return(default);