using System; using System.Net; using System.Security.Claims; using System.Threading.Tasks; using GxPress.Common.Exceptions; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; using Newtonsoft.Json; namespace GxPress.Common.Middleware { /// /// 自定义异常中间件 /// public class ExceptionMiddlewareDto { private readonly RequestDelegate _next; private readonly ILogger _logger; private readonly IHttpContextAccessor _contextAccessor; //private readonly IUserService userService; public ExceptionMiddlewareDto(RequestDelegate next, ILogger logger, IHttpContextAccessor contextAccessor) { _next = next; _logger = logger; _contextAccessor = contextAccessor; } public async Task Invoke(HttpContext context) { try { // await _next.Invoke(context); if (context.User != null) { var ty = _contextAccessor?.HttpContext?.User?.FindFirst(ClaimTypes.Role); if (!ty.Value.Equals("Admin")) { } } } catch (BusinessException be) { _logger.LogDebug(be.Message); await HandleBusinessException(context, be); } catch (System.Exception ex) { _logger.LogError(ex, ex.Message); await HandleSystemException(context, ex); } } /// /// 处理业务异常 /// /// /// /// private Task HandleBusinessException(HttpContext context, BusinessException be) { context.Response.StatusCode = (int)HttpStatusCode.BadRequest; context.Response.ContentType = "application/json;charset=utf-8"; return context.Response.WriteAsync(JsonConvert.SerializeObject(new { be.Message, be.StackTrace })); } /// /// 处理系统异常 /// /// /// /// private Task HandleSystemException(HttpContext context, Exception ex) { context.Response.StatusCode = (int)HttpStatusCode.InternalServerError; context.Response.ContentType = "application/json;charset=utf-8"; return context.Response.WriteAsync(JsonConvert.SerializeObject(ex)); } } }