123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- using Microsoft.AspNetCore.Http;
- using System;
- using System.Threading.Tasks;
- using TEAMModelOS.SDK.Context.Constant.Common;
- using TEAMModelOS.SDK.Context.Exception;
- using TEAMModelOS.SDK.Extension;
- 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 InvokeAsync(HttpContext context)
- {
- int bizCode = 0;
- System.Exception exs = null;
- bool isCatched = false;
- try
- {
- await _next(context);
- }
- catch (System.Exception ex) //发生异常
- {
- exs = ex;
- //自定义业务异常
- if (ex is BizException)
- {
- bizCode = ((BizException)ex).code;
- if (bizCode == 401 || bizCode == 404 || bizCode == 502 || bizCode == 403)
- {
- //context.Response.StatusCode = bizCode;
- }
- else
- {
- // context.Response.StatusCode = 200;
- }
- // context.Response.StatusCode = ((BizException)ex).code;
- }
- //未知异常
- else
- {
- //context.Response.StatusCode = 500;
- //LogHelper.SetLog(LogLevel.Error, ex);
- }
- await HandleExceptionAsync(context, bizCode, ex.Message, ex.StackTrace);
- isCatched = true;
- }
- finally
- {
- if (!isCatched && context.Response.StatusCode != 200)//未捕捉过并且状态码不为200
- {
- string msg;
- switch (context.Response.StatusCode)
- {
- case 400:
- msg = "Bad Request";
- break;
- case 401:
- msg = "Unauthorized";
- break;
- case 404:
- msg = "Service Not Found";
- break;
- case 502:
- msg = "Request Erro";
- break;
- case 500:
- msg = exs.Message;
- break;
- case 403:
- msg = "金钥验证错误";
- break;
- default:
- msg = "Unknown Error";
- break;
- }
- await HandleExceptionAsync(context, bizCode, 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 bizCode, string msg, string devmsg)
- {
- if (context.Response.StatusCode == 500)
- {
- // context.Response.StatusCode = 200;
- }
- var data = new ErrorResponse<string>(bizCode, msg, devmsg);
- context.Response.ContentType = Constants.CONTENT_TYPE_JSON;
- //if (context.Response.HasStarted) {
- await context.Response.WriteAsync(data.ToJsonString());
- //}
- }
- /// <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 int code { get; set; } = 1;
- public string message { get; set; }
- public string devmsg { get; set; }
- public E data { get; set; }
- }
- }
|