Beispiel #1
0
        /// <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));
            }
        }