| using Microsoft.AspNetCore.Http; | 
| using Newtonsoft.Json; | 
| using System; | 
| using System.Collections.Generic; | 
| using System.DirectoryServices.Protocols; | 
| using System.Linq; | 
| using System.Net; | 
| using System.Text; | 
| using System.Threading.Tasks; | 
|   | 
| namespace WIDESEA_Core.Middlewares | 
| { | 
|     public class ExceptionHandlerMiddleware | 
|     { | 
|         private readonly RequestDelegate _next; | 
|   | 
|         public ExceptionHandlerMiddleware(RequestDelegate next) | 
|         { | 
|             _next = next; | 
|         } | 
|   | 
|         public async Task Invoke(HttpContext context) | 
|         { | 
|             try | 
|             { | 
|                 await _next(context); | 
|             } | 
|             catch (Exception ex) | 
|             { | 
|                 await HandleExceptionAsync(context, ex); | 
|             } | 
|         } | 
|   | 
|         private async Task HandleExceptionAsync(HttpContext context, Exception e) | 
|         { | 
|             if (e == null) return; | 
|   | 
|             await WriteExceptionAsync(context, e).ConfigureAwait(false); | 
|         } | 
|   | 
|         private static async Task WriteExceptionAsync(HttpContext context, Exception e) | 
|         { | 
|             var message = e.Message; | 
|             switch (e) | 
|             { | 
|                 case UnauthorizedAccessException: | 
|                     context.Response.StatusCode = (int)HttpStatusCode.Unauthorized; | 
|                     break; | 
|                 default: | 
|                     context.Response.StatusCode = (int)HttpStatusCode.InternalServerError; | 
|                     break; | 
|             } | 
|             context.Response.ContentType = "application/json"; | 
|             await context.Response | 
|                 .WriteAsync(JsonConvert.SerializeObject(WebResponseContent.Instance.Error(message))) | 
|                 .ConfigureAwait(false); | 
|         } | 
|     } | 
| } |