123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- using Microsoft.AspNetCore.Http;
- using System;
- using System.Threading.Tasks;
- using TEAMModelOS.SDK.Context.Constant.Common;
- using TEAMModelOS.SDK.Context.Exception;
- using TEAMModelOS.SDK.Helper.Common.JsonHelper;
- namespace TEAMModelOS.SDK.Context.Filter
- {
- public class HttpGlobalExceptionInvoke
- {
- private readonly RequestDelegate _next;
- /// <summary>
- ///
- /// </summary>
- /// <param name="next"></param>
- public HttpGlobalExceptionInvoke(RequestDelegate next)
- {
- _next = next;
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name="context"></param>
- /// <returns></returns>
- public async Task Invoke(HttpContext context)
- {
- System.Exception exs = null;
- bool isCatched = false;
- try
- {
- await _next(context);
- }
- catch (System.Exception ex) //发生异常
- {
- exs = ex;
- //自定义业务异常
- if (ex is BizException)
- {
- context.Response.StatusCode = ((BizException)ex).code;
- }
- //未知异常
- else
- {
- context.Response.StatusCode = 500;
- //LogHelper.SetLog(LogLevel.Error, ex);
- }
- await HandleExceptionAsync(context, context.Response.StatusCode, ex.Message, ex.StackTrace);
- isCatched = true;
- }
- finally
- {
- if (!isCatched && context.Response.StatusCode != 200)//未捕捉过并且状态码不为200
- {
- string msg;
- msg = context.Response.StatusCode switch
- {
- 401 => "Unauthorized",
- 404 => "Service Not Found",
- 502 => "Request Erro",
- 500 => exs.Message,
- 403 => exs.Message,
- _ => "Unknown Error",
- };
- await HandleExceptionAsync(context, context.Response.StatusCode, msg, exs == null ? "" : exs.StackTrace);
- }
- }
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name="context"></param>
- ///
- ///
- /// <param name="statusCode"></param>
- /// <param name="msg"></param>
- /// <returns></returns>
- private static async Task HandleExceptionAsync(HttpContext context, int statusCode, string msg, string devmsg)
- {
- var data = new ErrorResponse<string>(statusCode, msg, devmsg);
- context.Response.ContentType = Constants.CONTENT_TYPE_JSON;
- await context.Response.WriteAsync(data.ToJson());
- }
- /// <summary>
- /// 异常信息封装
- /// </summary>
- ///
- public class ErrorResponse<T>
- {
- public ErrorResponse()
- {
- error = new ErrorModel<T>();
- }
- public ErrorResponse(string message)
- {
- error = new ErrorModel<T>
- {
- message = message,
- devmsg = message
- };
- }
- public ErrorResponse(int code, string message)
- {
- error = new ErrorModel<T>
- {
- message = message,
- devmsg = message,
- code = code
- };
- }
- public ErrorResponse(int code, string message, string devMessage)
- {
- error = new ErrorModel<T>
- {
- message = message,
- devmsg = message,
- code = code
- };
- error.devmsg = devMessage;
- }
- public string jsonrpc { get; set; } = "2.0";
- public double id { get; set; } = 1;
- private object result { get; set; } = null;
- public ErrorModel<T> error { get; set; } = null;
- }
- }
- public class ErrorModel<E>
- {
- public long responseTime = DateTime.Now.Ticks;
- public float code { get; set; } = 1;
- public string message { get; set; }
- public string devmsg { get; set; }
- public E data { get; set; }
- }
- }
|