common code added in Global.asax
protected void Application_Error(object sender, EventArgs e)
{
var exception = Server.GetLastError();
// This should be the path in filesystem relative to where your controller and action
var requestControllerName = Convert.ToString(HttpContext.Current.Request.RequestContext?.RouteData?.Values["controller"]);
var requestActionName = Convert.ToString(HttpContext.Current.Request.RequestContext?.RouteData?.Values["action"]);
var errorArea = "Errors";
var errorController = "Error";
var errorAction = "Index";
if ((ControllerActionForPopupError.ErrorPopupController.Contains(requestControllerName)) & (ControllerActionForPopupError.ErrorPopupAction.Contains(requestActionName)))
{
errorAction = "ShowErrorPopUp";
}
var pathToViewFile = $"~/Areas/{errorArea}/Views/{errorController}/{errorAction}.cshtml";
var controller = new ErrorController();
var routeData = new RouteData { DataTokens = { { "area", errorArea } }, Values = { { "controller", errorController }, { "action", errorAction } } };
var controllerContext = new ControllerContext(new HttpContextWrapper(HttpContext.Current), routeData, controller);
controller.ControllerContext = controllerContext;
var sw = new StringWriter();
var razorView = new RazorView(controller.ControllerContext, pathToViewFile, "", false, null);
var model = new ViewDataDictionary(new HandleErrorInfo(exception, requestControllerName, requestActionName));
var viewContext = new ViewContext(controller.ControllerContext, razorView, model, new TempDataDictionary(), sw);
razorView.Render(viewContext, sw);
//error log
var randomNo = new Random(Guid.NewGuid().GetHashCode());
var logNo = randomNo.Next(1, 10000000);
razorView.Render(viewContext, sw);
string errorLogMsg = string.Empty;
if (exception.InnerException != null)
{
errorLogMsg = string.Format(ErrorLog.ErrorLogMsg, logNo, Session[SessionVariableNames.UserName], requestControllerName, requestActionName, exception.InnerException);
}
else
{
errorLogMsg = string.Format(ErrorLog.ErrorLogMsg, logNo, Session[SessionVariableNames.UserName], requestControllerName, requestActionName, exception);
}
if (Response.StatusCode == (int)HamaspikData.Utility.Enums.ErrorStatusCode.Success)
{
if (exception.Message.Contains(ErrorLog.SessionTimeOutErr) || exception.Message.Contains(ErrorLog.ModuleListNotReturnErr))
{
Response.StatusCode = (int)HamaspikData.Utility.Enums.ErrorStatusCode.UnassignedError;
}
else
{
Response.StatusCode = new HttpException(null, exception).GetHttpCode();
}
}
if (exception.Message.Contains(ErrorLog.PageNotFoundErr))
{
viewContext.ViewBag.ErrorMessage = string.Format(ErrorLog.PageNotFoundMsg, logNo);
}
else
{
if (exception.Message.Contains(ErrorLog.SessionTimeOutErr))
{
viewContext.ViewBag.ErrorMessage = ErrorLog.TimeoutMessage;
}
else if (exception.Message.Contains(ErrorLog.ModuleListNotReturnErr))
{
viewContext.ViewBag.ErrorMessage = ErrorLog.ModuleListNotReturnMessage;
}
else
{
viewContext.ViewBag.ErrorMessage = string.Format(ErrorLog.Message, logNo);
}
}
viewContext.ViewBag.ErrorStatusCode = Response.StatusCode.ToString();
Logger.globalException(errorLogMsg);
razorView.Render(viewContext, sw);
HttpContext.Current.Response.Write(sw);
Server.ClearError();
HttpContext.Current.Response.End();
}
web config setting,
<customErrors mode="Off">
its working fine in normal web hosting or IIS publishing but not working in Azure site any one have idea how can fix it.