public virtual bool TryDisplayErrorView(Exception ex, Exceptions.ErrorPage errorPage, int httpStatusCode, bool throwErrorIfAny) { try { if (this.ControllerContext == null) { throw new ApplicationException("Controller context not set. Be sure to call InitContext on base controller before displaying an error view."); } string areaName = (RouteData != null && RouteData.DataTokens.ContainsKey("area") ? RouteData.DataTokens["area"].ToString() : null); string controllerName = (RouteData != null && RouteData.Values.ContainsKey("controller") ? RouteData.Values["controller"].ToString() : null); string actionName = (RouteData != null && RouteData.Values.ContainsKey("action") ? RouteData.Values["action"].ToString() : null); if (string.IsNullOrEmpty(areaName)) { actionName = "(unknown area)"; } if (string.IsNullOrEmpty(controllerName)) { controllerName = "(unknown controller)"; } if (string.IsNullOrEmpty(actionName)) { actionName = "(unknown action)"; } string ipAddress = this.Request.UserHostAddress; StoreFront currentStoreFrontOrNull = null; StoreFrontConfiguration currentStoreFrontConfigOrNull = null; _throwErrorIfAnonymous = false; _throwErrorIfStoreFrontNotFound = false; _throwErrorIfUserProfileNotFound = false; _useInactiveStoreFrontAsActive = true; _useInactiveStoreFrontConfigAsActive = true; try { currentStoreFrontOrNull = CurrentStoreFrontOrNull; currentStoreFrontConfigOrNull = CurrentStoreFrontConfigOrNull; } catch (Exception) { } Response.Clear(); Response.StatusCode = httpStatusCode; string errorPageFileName = errorPage.ErrorPageFileName(); if (!Enum.IsDefined(typeof(Exceptions.ErrorPage), errorPage)) { return false; } string errorViewName = Enum.GetName(typeof(Exceptions.ErrorPage), errorPage); if (string.IsNullOrEmpty(Request["NotFound"]) && errorPage == ErrorPage.Error_NotFound && CurrentStoreFrontIdOrNull != null && currentStoreFrontConfigOrNull.NotFoundErrorPage != null && currentStoreFrontConfigOrNull.NotFoundErrorPage.IsActiveBubble()) { string urlRedirect = currentStoreFrontConfigOrNull.NotFoundErrorPage.UrlResolved(Url) + "?NotFound=1"; AddUserMessage("Page Not Found", "Sorry, the URL you were looking for was not found. '" + Request.Url.ToString().ToHtml() + "'", UserMessageType.Danger); new RedirectResult(urlRedirect, false).ExecuteResult(this.ControllerContext); return true; } if (string.IsNullOrEmpty(Request["StoreError"]) && (errorPage == ErrorPage.Error_AppError || errorPage == ErrorPage.Error_BadRequest || errorPage == ErrorPage.Error_HttpError || errorPage == ErrorPage.Error_InvalidOperation || errorPage == ErrorPage.Error_UnknownError) && CurrentStoreFrontIdOrNull != null && currentStoreFrontConfigOrNull.StoreErrorPage != null && currentStoreFrontConfigOrNull.StoreErrorPage.IsActiveBubble()) { string urlRedirect = currentStoreFrontConfigOrNull.StoreErrorPage.UrlResolved(Url) + "?StoreError=1"; AddUserMessage("Server Error", "Sorry, there was a server error processing your request for URL '" + Request.Url.ToString().ToHtml() + "'", UserMessageType.Danger); new RedirectResult(urlRedirect, false).ExecuteResult(this.ControllerContext); return true; } GStoreErrorInfo model = new GStoreErrorInfo(errorPage, ex, RouteData, controllerName, actionName, ipAddress, currentStoreFrontOrNull, Request.RawUrl, Request.Url.ToString()); View(errorViewName, model).ExecuteResult(this.ControllerContext); return true; } catch (Exception exDisplay) { string message = "Error in Controller Error View." + " \n --Controller: " + this.GetType().FullName + " \n --Url: " + Request.Url.ToString() + " \n --RawUrl: " + Request.RawUrl + " \n --ErrorPage: " + "[" + ((int)errorPage).ToString() + "] " + errorPage.ToString() + " \n --Exception: " + exDisplay.ToString() + " \n --Source: " + exDisplay.Source + " \n --TargetSiteName: " + exDisplay.TargetSite.Name + " \n --StackTrace: " + exDisplay.StackTrace + " \n --Original Exception: " + ex.Message.ToString() + " \n --Original Source: " + ex.Source + " \n --Original TargetSiteName: " + ex.TargetSite.Name + " \n --Original StackTrace: " + ex.StackTrace; System.Diagnostics.Trace.WriteLine("--" + message); string exceptionMessage = exDisplay.Message; string baseExceptionMessage = ex.GetBaseException().Message; string baseExceptionToString = ex.GetBaseException().ToString(); GStoreDb.LogSystemEvent(HttpContext, RouteData, RouteData.ToSourceString(), SystemEventLevel.ApplicationException, message, exceptionMessage, baseExceptionMessage, baseExceptionToString, this); if (throwErrorIfAny) { throw new ApplicationException(message, exDisplay); } return false; } }