//Обработка ошибок для всего приложения protected void Application_Error(object sender, EventArgs e) { string requestType=Request.RequestType; if (requestType.Equals("GET")) { HttpContext ctx = HttpContext.Current; Exception ex = ctx.Server.GetLastError(); var httpException = ex as HttpException; if (httpException != null) { if (httpException.GetHttpCode() == 404) { ctx.Response.Clear(); RequestContext rc = ((MvcHandler)ctx.CurrentHandler).RequestContext; IController controller = new HomeController(); // Здесь можно использовать любой контроллер var context = new ControllerContext(rc, (ControllerBase)controller); var viewResult = new ViewResult(); //страницы будут искаться в Views/Shared viewResult.ViewName = "Error404"; viewResult.ViewData.Model = new HandleErrorInfo(ex, context.RouteData.GetRequiredString("controller"), context.RouteData.GetRequiredString("action")); viewResult.ExecuteResult(context); ctx.Server.ClearError(); } } } }
public void OnException(ExceptionContext filterContext) { HttpContext ctx = HttpContext.Current; Exception ex = ctx.Server.GetLastError(); ctx.Response.Clear(); RequestContext rc = ((MvcHandler)ctx.CurrentHandler).RequestContext; IController controller = new HomeController(); // Здесь можно использовать любой контроллер var context = new ControllerContext(rc, (ControllerBase)controller); var viewResult = new ViewResult(); var httpException = ex as HttpException; if (httpException != null) { switch (httpException.GetHttpCode()) { //страницы будут искаться в Views/Shared case 404: viewResult.ViewName = "Error404"; break; case 500: viewResult.ViewName = "Error500"; break; default: viewResult.ViewName = "Error"; break; } } else { viewResult.ViewName = "Error"; } viewResult.ViewBag.Message = filterContext.Exception.Message; //logging HttpSessionStateBase sessionBase = new HttpSessionStateWrapper(ctx.Session); AppLogger.Error(sessionBase, filterContext.Exception.Message); try{ viewResult.ViewBag.TargetSite = filterContext.Exception.TargetSite; viewResult.ViewBag.StackTrace = filterContext.Exception.StackTrace; }catch(Exception e){} viewResult.ExecuteResult(context); ctx.Server.ClearError(); }