/*********************************************************************** * Project: baifenBinfa.Net * * Web: https://baifenBinfa.com * * ProjectName: 百分兵法管理系统 * * Author: * * Email: * * Versions: 1.0 * * CreateTime: 2020-02-05 19:08:19 * NameSpace: CoreCms.Net.Framework.Middlewares * FileName: ExceptionHandlerMidd * ClassDescription: ***********************************************************************/ using System; using System.Net; using System.Threading.Tasks; using CoreCms.Net.Loging; using CoreCms.Net.Model.ViewModels.UI; using Microsoft.AspNetCore.Http; using Newtonsoft.Json; using NLog; namespace CoreCms.Net.Middlewares; /// /// 异常错误统一返回记录 /// public class ExceptionHandlerMiddlewareForClent { private readonly RequestDelegate _next; public ExceptionHandlerMiddlewareForClent(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 ex) { if (ex == null) return; NLogUtil.WriteAll(LogLevel.Error, LogType.ApiRequest, "全局捕获异常", ex.Message, ex); await WriteExceptionAsync(context, ex).ConfigureAwait(false); } private static async Task WriteExceptionAsync(HttpContext context, Exception e) { if (e is UnauthorizedAccessException) context.Response.StatusCode = (int)HttpStatusCode.Unauthorized; else if (e != null) context.Response.StatusCode = (int)HttpStatusCode.BadRequest; context.Response.ContentType = "application/json"; var jm = new WebApiCallBack(); jm.status = false; jm.code = 500; jm.data = e; jm.msg = "全局数据异常"; await context.Response.WriteAsync(JsonConvert.SerializeObject(jm)).ConfigureAwait(false); } }