对比新文件 |
| | |
| | | 锘縰sing 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); |
| | | } |
| | | } |
| | | } |