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);
}
}
}
}