/// <summary> /// This method is used to log exception to database and return a generic error message /// </summary> /// <param name="context"></param> public override void OnException(HttpActionExecutedContext context) { HttpContext ctx = HttpContext.Current; var message = ctx.Server.GetLastError() != null?ctx.Server.GetLastError().Message.ToString(CultureInfo.InvariantCulture) : ""; var source = ctx.Server.GetLastError() != null?ctx.Server.GetLastError().Source.ToString(CultureInfo.InvariantCulture) : ""; var StackTrace = ctx.Server.GetLastError() != null?ctx.Server.GetLastError().Message.ToString(CultureInfo.InvariantCulture) : ""; var errorLog = new LogError { UserName = ctx.User.Identity.Name, ApplicationUrl = ctx.Request.Url + Environment.NewLine, Message = context.Exception.Message.ToString(CultureInfo.InvariantCulture), Source = (context.Exception).Source.ToString(CultureInfo.InvariantCulture), StackTrace = (context.Exception).StackTrace.ToString(CultureInfo.InvariantCulture) }; BAL_ErrorLog.LogException(errorLog); context.Response = context.Request.CreateResponse(HttpStatusCode.OK, new Response <string> { Status = false, Message = "An error has occured" }, context.ActionContext.ControllerContext.Configuration.Formatters.JsonFormatter); }
void ErrorLog(Exception exception) { var httpContext = HttpContext.Current; var currentController = ""; var currentAction = "Index"; var currentRouteData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(httpContext)); if (currentRouteData != null) { if (currentRouteData.Values["controller"] != null && !string.IsNullOrEmpty(currentRouteData.Values["controller"].ToString())) { currentController = currentRouteData.Values["controller"].ToString(); } if (currentRouteData.Values["action"] != null && !string.IsNullOrEmpty(currentRouteData.Values["action"].ToString())) { currentAction = currentRouteData.Values["action"].ToString(); } var controller = new ErrorPageController(); var routeData = new RouteData(); var action = "Index"; if (exception is HttpException) { var httpEx = exception as HttpException; switch (httpEx.GetHttpCode()) { case 400: action = "Error400"; break; case 401: action = "Error401"; break; case 500: action = "Error500"; break; case 403: action = "Error403"; break; case 404: action = "Error404"; break; default: action = "Index"; break; } } httpContext.ClearError(); httpContext.Response.Clear(); httpContext.Response.StatusCode = exception is HttpException ? ((HttpException)exception).GetHttpCode() : 500; httpContext.Response.TrySkipIisCustomErrors = true; routeData.Values["controller"] = "ErrorPage"; routeData.Values["action"] = action; if (exception != null) { BAL_ErrorLog.LogException(new LogError { UserName = "", ApplicationUrl = HttpContext.Current.Request.Url + Environment.NewLine, Message = exception.Message != null ? exception.Message.ToString(CultureInfo.InvariantCulture) : "", Source = exception.Source != null ? exception.Source.ToString(CultureInfo.InvariantCulture) : "", StackTrace = exception.StackTrace != null ? exception.StackTrace.ToString(CultureInfo.InvariantCulture) : "" }); controller.ViewData.Model = new HandleErrorInfo(exception ?? new Exception(), currentController, currentAction); } ((IController)controller).Execute(new RequestContext(new HttpContextWrapper(httpContext), routeData)); } }