Skip to content

Instantly share code, notes, and snippets.

@umayeras
Last active November 12, 2021 11:42
Show Gist options
  • Save umayeras/d951830ec926acc66778d648bd98f200 to your computer and use it in GitHub Desktop.
Save umayeras/d951830ec926acc66778d648bd98f200 to your computer and use it in GitHub Desktop.
public class ExceptionHandlingBehavior<TRequest, TResponse, TException> : IRequestExceptionHandler<TRequest, TResponse, TException>
where TRequest : notnull
where TException : Exception
where TResponse : notnull, ServiceResponse
{
private readonly ILogger<ExceptionHandlingBehavior<TRequest, TResponse, TException>> logger;
public ExceptionHandlingBehavior(
ILogger<ExceptionHandlingBehavior<TRequest, TResponse, TException>> logger)
{
this.logger = logger;
}
public Task Handle(TRequest request, TException exception, RequestExceptionHandlerState<TResponse> state, CancellationToken cancellationToken)
{
var error = CreateExceptionError(exception);
logger.LogError(JsonSerializer.Serialize(error));
var response = ServiceResponse.CreateExceptionError();
state.SetHandled(response as TResponse);
return Task.FromResult(response);
}
private static ExceptionError CreateExceptionError(TException exception)
{
var methodName = exception.TargetSite?.DeclaringType?.DeclaringType?.FullName;
var message = exception.Message;
var innerException = exception.InnerException?.Message;
var stackTrace = exception.StackTrace;
return new ExceptionError(methodName, message, innerException, stackTrace);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment