using Gatedge.K3Cloud.Utils.Exceptions; using Gatedge.ScanCode.Common; using System.Text.Json; namespace Gatedge.ScanCode.Middleware { /// /// 自定义异常中间件 /// public class GlobalExceptionMiddleware { /// /// 委托 /// private readonly RequestDelegate _next; private readonly ILogger _logger; /// /// 构造方法 /// /// /// public GlobalExceptionMiddleware(RequestDelegate next, ILogger logger) { _next = next; _logger = logger; } /// /// 拦截请求 /// /// /// public async Task Invoke(HttpContext context) { try { await _next(context); } catch (Exception ex) { var result = AjaxResult.Error(500, ex.Message); var errTitle = ex.Message; var errInfo = ex.Message; if (ex is K3CloudException) { K3CloudException k3ViewException = (K3CloudException)ex; result = AjaxResult.Error(ex.Message); result.Add("error", k3ViewException.responseStatus.Errors); errInfo = JsonSerializer.Serialize(k3ViewException.responseStatus.Errors); } var errMessage = @$" ================================================= errTitle: {errTitle} errInfo: {errInfo} ================================================= "; _logger.LogError(errMessage); context.Response.ContentType = "application/problem+json"; var stream = context.Response.Body; await JsonSerializer.SerializeAsync(stream, result); } } } }