//readonly IExceptionManagement exceptionManagement; //public ExceptionFilter(IExceptionManagement exceptionManagement) //{ // this.exceptionManagement = exceptionManagement; //} public void OnException(ExceptionContext context) { Exception ex = context.Exception; if (ex is AggregateException) { ex = ex.InnerException; } var model = exceptionProcessModule.ProcessException(ex); var errorResult = new ErrorResult() { Code = model.Code, Message = model.Message, Errors = model.Errors, }; if ((model.LogType & LogType.LogTraceId) == LogType.LogTraceId) { errorResult.TraceId = Guid.NewGuid().ToString("D"); } if (exceptionLogModule != null) { exceptionLogModule.LogError(context.HttpContext, ex, model, errorResult); } object httpData; if (exceptionResultModule != null) { httpData = exceptionResultModule.CreateResult(ex, errorResult); } else { httpData = errorResult; } context.HttpContext.Response.StatusCode = model.HttpStatus; context.Result = new JsonResult(httpData); }
/// <summary> /// /// </summary> /// <param name="exception"></param> /// <param name="result"></param> /// <returns></returns> public object CreateResult(Exception exception, ErrorResult result) { return(result); }
public void LogError(HttpContext httpContext, Exception exception, ExceptionModel model, ErrorResult result) { bool logMessage = (model.LogType & LogType.LogMessage) == LogType.LogMessage; bool logPostData = (model.LogType & LogType.LogPostData) == LogType.LogPostData; bool logFullException = (model.LogType & LogType.LogFullException) == LogType.LogFullException; bool logTraceId = (model.LogType & LogType.LogTraceId) == LogType.LogTraceId; bool log = logMessage || logPostData || logFullException || logTraceId; if (logger != null && log) { var user = httpContext.GetAccount(); var action = httpContext.Request.Method + " " + httpContext.Request.Path.Value; if (httpContext.Request.QueryString.HasValue) { action += " " + httpContext.Request.QueryString.Value; } var token = httpContext.GetToken(); var sb = new StringBuilder(); sb.Append($"type:\"{exception.GetType().FullName}\""); sb.Append($",message:\"{FormatString(exception.Message)}\""); sb.Append($",action:\"{FormatString(action)}\""); if (token != null) { sb.Append($",token:\"{FormatString(token)}\""); } if (user != null) { sb.Append($",user:\"{FormatString(user)}\""); } sb.Append($",http_code:\"{model.HttpStatus}\""); if (logTraceId) { sb.Append($",traceid:\"{result.TraceId}\""); } sb.Append($",err_code:\"{result.Code}\",err_msg:\"{FormatString(result.Message)}\""); if (logPostData) { if (httpContext.Request.ContentLength.HasValue && httpContext.Request.ContentLength.Value > 0) { httpContext.Request.EnableRewind(); httpContext.Request.Body.Seek(0, 0); string content; using (StreamReader sr = new StreamReader(httpContext.Request.Body, Encoding.UTF8)) { content = sr.ReadToEnd(); } if (!string.IsNullOrEmpty(content)) { sb.AppendLine(); sb.AppendLine("***Post Data Start***"); sb.AppendLine(content); sb.AppendLine("***Post Data End***"); } } } if (!logFullException) { logger.LogError(sb.ToString()); } else { logger.LogError(exception, sb.ToString()); } } }