public void MessageFromResourceIsUsedIfAvailable() { var exception = new ErrorCodeException(CommonErrors.CouldNotLocateCommand); var userInfo = this.SystemUnderTest.BuildUserInformation(exception, TestResouces.ResourceManager, "default message"); Assert.Equal("You're insane! You know that, right?", userInfo.Message); }
public void MessageIsSetToDefaultIfNoneIsProvided() { var exception = new ErrorCodeException(CommonErrors.MissingApplicationConfiguration); var expectedMessage = string.Format("{0} - {1}", CommonErrors.MissingApplicationConfiguration.FullIdentifier, CommonErrors.MissingApplicationConfiguration.ShortDescription); Assert.Equal(expectedMessage, exception.Message); }
public void OnException(ExceptionContext context) { JsonResponses jsonResponses = JsonResponses.Failed.Clone(); Exception ex = context.Exception; string errMsg = "Exception:" + ex.ToString(); if (context.Exception.GetType() == typeof(ErrorCodeException)) { ErrorCodeException errorCodeException = (ErrorCodeException)ex; //针对不同的自定义异常,做不同处理 jsonResponses.code = errorCodeException.GetErrorCode(); jsonResponses.msg = errorCodeException.GetErrorMsg(); } else if (context.Exception.GetType() == typeof(WebSocketException)) { //针对不同的自定义异常,做不同处理 WebSocketException errorCodeException = (WebSocketException)ex; jsonResponses.code = errorCodeException.ErrorCode; jsonResponses.msg = errorCodeException.Message; } else if (context.Exception.GetType() == typeof(ArgumentException)) { //针对不同的自定义异常,做不同处理 ArgumentException errorCodeException = (ArgumentException)ex; jsonResponses.msg = errorCodeException.Message; } else { jsonResponses.msg = "系统错误"; } context.Result = new JsonResult(jsonResponses); context.ExceptionHandled = true; LogAgent.Error(errMsg + " " + JsonConvert.SerializeObject(jsonResponses)); }
public void ErrorCodeExceptionSetsFormattingObject() { var formattingObject = new { formatting = true, yes = "this has a value" }; var exception = new ErrorCodeException(CommonErrors.MissingApplicationConfiguration, formattingObject); Assert.Equal(formattingObject, exception.FormattingObject); }
public void InstanceIdentiferDifferentOnDifferentInstances() { var exception_one = new ErrorCodeException(CommonErrors.MissingApplicationConfiguration); var exception_two = new ErrorCodeException(CommonErrors.MissingApplicationConfiguration); Assert.NotEqual(exception_one.InstanceIdentifier, exception_two.InstanceIdentifier); }
public void MessageFromResourceIsFormattedIfPossible() { var formattingObject = new { name = "Fozzy" }; var exception = new ErrorCodeException(CommonErrors.MissingApplicationConfiguration, formattingObject); var userInfo = this.SystemUnderTest.BuildUserInformation(exception, TestResouces.ResourceManager, "default message"); Assert.Equal("Hello, Fozzy", userInfo.Message); }
public ErrorResponseDto(ErrorCodeException exception, bool addStackTrace = false) { error = exception.ErrorCode; _statusCode = exception.GetStatusCode(); error_description = exception.Message; error_uri = _statusCode.GetStatusCodeUri(); stack_trace = addStackTrace ? exception.ToString() : null; state = exception.State; }
public void IfResourceManagerIsNullDefaultMessageIsReturnedWithErrorCodeInformation() { var exception = new ErrorCodeException(CommonErrors.MissingApplicationConfiguration); var userInfo = this.SystemUnderTest.BuildUserInformation(exception, null, "default message"); Assert.Equal("default message", userInfo.Message); Assert.Equal(CommonErrors.MissingApplicationConfiguration.FullIdentifier, userInfo.Code); Assert.Equal(exception.InstanceIdentifier.ToString(), userInfo.Instance); }
public void OnException(ExceptionContext filterContext) { // 异常时直接抛出500错误 /*filterContext.HttpContext.Response = * actionExecutedContext.Request.CreateResponse(HttpStatusCode.InternalServerError);*/ var exception = filterContext.Exception as ErrorCodeException; // 路由相关的信息 (收集信息,暂时不需要记录所以注释该段代码) ////var route = actionExecutedContext.Request.GetRouteData().Route.RouteTemplate; ////var method = actionExecutedContext.Request.Method.Method; ////var url = actionExecutedContext.Request.RequestUri.AbsoluteUri; //var controllerName =filterContext.Request // actionExecutedContext.ActionContext.ActionDescriptor.ControllerDescriptor.ControllerName; //var actionName = actionExecutedContext.ActionContext.ActionDescriptor.ActionName; // 业务模块抛出的异常信息 if (exception == null) { // 系统系统时 /*exception = new ErrorCodeException("500", actionExecutedContext.Exception.Message, * "SystemError!");*/ exception = new ErrorCodeException("500", filterContext.Exception.Message, filterContext.Exception) { DisplayMessage = "SystemError!" }; } // 写入head filterContext.HttpContext.Response.AddHeader("ApiCode", exception.ErrorCode); filterContext.HttpContext.Response.AddHeader("ApiMessage", exception.DisplayMessage); filterContext.HttpContext.Response.AddHeader("ApiVersion", "v2.0.0"); // Write log /*var excptionMsg = exception.Message + (exception.InnerException != null ? ".InnerException:" + exception.InnerException.Message : string.Empty);*/ var excptionMsg = BuildMesageStack(exception); object actionName = null; if (!filterContext.RouteData.Values.TryGetValue("action", out actionName)) { actionName = "UNKNOW!"; } Logger.Write( Log.Log_Type.Error, filterContext.Controller.GetType().Namespace, filterContext.Controller.GetType().FullName, actionName.ToString(), excptionMsg.ToString()); }
/// <summary> /// 使用 <see cref="LogLevel.Warning"/> 级别打印错误日志,并记录异常堆栈。 /// </summary> /// <param name="logger">日志记录器的实例。</param> /// <param name="exception">错误码异常实例。</param> public static void LogWarningInfo(this ILogger logger, ErrorCodeException exception) { if (exception.ErrorCode < 50000) { throw exception; } var sb = new StringBuilder(); sb.Append($"错误代码: {exception.ErrorCode},信息: {ErrorCodeHelper.GetMessage(exception.ErrorCode)}"); sb.Append($"\n附加信息:\n {JsonConvert.SerializeObject(exception.AttachObject)}"); logger.LogWarning(sb.ToString()); }
public void MessageIsSetIfItsProvided() { var exception = new ErrorCodeException(CommonErrors.MissingApplicationConfiguration, "It's a message"); Assert.Equal("It's a message", exception.Message); }
public void NoFormattingObjectMeansPropertyIsNull() { var exception = new ErrorCodeException(CommonErrors.MissingApplicationConfiguration); Assert.Null(exception.FormattingObject); }
public void InstanceIdentifierNotEmpty() { var exception = new ErrorCodeException(CommonErrors.MissingApplicationConfiguration); Assert.NotEqual(Guid.Empty, exception.InstanceIdentifier); }
public void ErrorCodeExceptionSetsErrorCode() { var exception = new ErrorCodeException(CommonErrors.MissingApplicationConfiguration); Assert.NotNull(exception.ErrorCode); }
/// <summary> /// 异常筛选器 /// </summary> /// <param name="actionExecutedContext">异常类型</param> /// <param name="cancellationToken">取消标记</param> /// <returns>异步异常筛选器</returns> public Task ExecuteExceptionFilterAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken) { return(Task.Factory.StartNew( () => { // 路由相关的信息 (收集信息,暂时不需要记录所以注释该段代码) ////var route = actionExecutedContext.Request.GetRouteData().Route.RouteTemplate; ////var method = actionExecutedContext.Request.Method.Method; ////var url = actionExecutedContext.Request.RequestUri.AbsoluteUri; //var controllerName = // actionExecutedContext.ActionContext.ActionDescriptor.ControllerDescriptor.ControllerName; //var actionName = actionExecutedContext.ActionContext.ActionDescriptor.ActionName; // 业务模块抛出的异常信息 var exception = actionExecutedContext.Exception as ErrorCodeException; if (exception == null) { // 系统系统时 /*exception = new ErrorCodeException("500", actionExecutedContext.Exception.Message, * "SystemError!");*/ exception = new ErrorCodeException("500", actionExecutedContext.Exception.Message, actionExecutedContext.Exception) { DisplayMessage = actionExecutedContext.Exception.Message }; } ILog log = LogManager.GetLogger(this.GetType().Name); // 写入head var head = new HeaderResponsetInfo { ApiCode = exception.ErrorCode, ApiMessage = exception.DisplayMessage, ApiVersion = "v2.0.0" }; try { actionExecutedContext.Response.SetResponseHeadInfo(head); ; } catch (Exception ex) { var msg = BuildMesageStack(ex); log.Error("拦截异常HttpHead信息:" + Json.Encode(head)); log.Error("拦截异常发生错误,原因:" + msg); } // 异常时直接抛出500错误 # 20151215 kk186 修改:异常拦截时统一向外返回200状态码 actionExecutedContext.Response = actionExecutedContext.Request.CreateResponse(HttpStatusCode.OK); actionExecutedContext.Response = actionExecutedContext.Request .CreateResponse(HttpStatusCode.OK, new { code = head.ApiCode, msg = head.ApiMessage }, new JsonMediaTypeFormatter()); // 使用log4net写入 /*var excptionMsg = exception.Message + (exception.InnerException != null ? ".InnerException:" + exception.InnerException.Message : string.Empty);*/ var excptionMsg = BuildMesageStack(exception); excptionMsg.AppendLine("ErrorCode:" + exception.ErrorCode); excptionMsg.AppendLine("DisplayMessage:" + exception.DisplayMessage); log.Error(excptionMsg.ToString()); // 使用ETM公用的日志写入 Logger.Write(Log.Log_Type.Error, "WebApi_Exception_Filter:" + excptionMsg.ToString()); }, cancellationToken)); }