Exemplo n.º 1
0
        public void OnException(ExceptionContext context)
        {
            if (context.Exception.GetType() == typeof(MyException))
            {
                #region 业务异常处理,显示业务提示信息给用户
                MyException            myEx   = (context.Exception as MyException);
                MessageModel <JObject> result = new MessageModel <JObject>();
                result.msg    = context.Exception.Message;
                result.status = myEx.status;

                if (myEx.data != null)
                {
                    result.response = JObject.Parse(JsonConvert.SerializeObject(myEx.data));
                }
                else
                {
                    result.response = new JObject();
                }
                context.Result = result.GetResult();
                return;

                #endregion
            }
            else
            {
                var json = new JsonErrorResponse();
                json.Message = context.Exception.Message;//错误信息
                var errorAudit = "Unable to resolve service for";
                if (!string.IsNullOrEmpty(json.Message) && json.Message.Contains(errorAudit))
                {
                    json.Message = json.Message.Replace(errorAudit, $"(若新添加服务,需要重新编译项目){errorAudit}");
                }
                if (_env.IsDevelopment())
                {
                    json.DevelopmentMessage = context.Exception.StackTrace;//堆栈信息
                }
                string errorMsg = "系统异常,请联系管理员";
                MessageModel <string> result = new MessageModel <string>();
                result.msg      = errorMsg;
                result.status   = 500;
                result.response = "";
                context.Result  = result.GetResult();

                MiniProfiler.Current.CustomTiming("Errors:", json.Message);
                //采用log4net 进行错误日志记录
                _loggerHelper.LogError(json.Message + WriteLog(json.Message, context.Exception));

                _hubContext.Clients.All.SendAsync("ReceiveUpdate", LogLock.GetLogData()).Wait();
            }
        }