Advertisement
gurgiwurgi

Untitled

Oct 4th, 2022
1,306
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.16 KB | None | 0 0
  1.     public class ExceptionHandlerMiddleware
  2.     {
  3.         public async Task InvokeAsync(HttpContext httpContext, IBusService busService)
  4.         {
  5.             try
  6.             {
  7.                 await _next(httpContext);
  8.             }
  9.             catch (Exception ex)
  10.             {
  11.                 await HandleExceptionAsync(httpContext, ex, busService);
  12.             }
  13.         }
  14.  
  15.         private async Task HandleExceptionAsync(HttpContext context, Exception exception, IBusService busService)
  16.         {
  17.             context.Response.ContentType = "application/json";
  18.             CustomProblemDetails problem;
  19.  
  20.             if (exception is ApiException ex)
  21.             {
  22.                 problem = ProcessApiException(ex, context);
  23.             }
  24.             else if (exception is JsonSerializationException || exception is JsonReaderException)
  25.             {
  26.                 problem = ProcessJsonException(exception, context);
  27.             }
  28.             else if (exception is TaskCanceledException taskCanceledException)
  29.             {
  30.                 var cancelProblem = ProcessTaskCancelledException(context, taskCanceledException);
  31.  
  32.                 if (cancelProblem is null)
  33.                 {
  34.                     return;
  35.                 }
  36.  
  37.                 problem = cancelProblem;
  38.             }
  39.             else if (exception is OperationCanceledException operationCanceledException)
  40.             {
  41.                 var cancelProblem = ProcessOperationCancelledException(context, operationCanceledException);
  42.  
  43.                 if (cancelProblem is null)
  44.                 {
  45.                     return;
  46.                 }
  47.  
  48.                 problem = cancelProblem;
  49.             }
  50.             else
  51.             {
  52.                 problem = ProcessException(exception, context);
  53.             }
  54.  
  55.             if (_sendSms)
  56.             {
  57.                 var smsDto = new SmsMessageDto($"{problem.Details} [{exception.Message}]");
  58.  
  59.                 await busService.PublishAsync<ISmsMessageRequested>(smsDto);
  60.             }
  61.  
  62.             context.Response.StatusCode = problem.Status;
  63.  
  64.             await context.Response.WriteAsync(problem.ToJson());
  65.         }
  66.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement