朋友问到一个问题,如何输出自定义错误页面,不使用302跳转。当前页面地址不能改变.
还要执行一些代码等,生成一些错误信息,方便用户提交反馈.
500错误,mvc框架已经有现成解决方法:
filters.Add(new HandleErrorAttribute());
404错误目前想到的解决方法:
先上代码 Global.asax:
1 protected void Application_Error(object sender, EventArgs e) 2 { 3 var ex = Server.GetLastError() as HttpException; 4 if (ex == null) 5 return; 6 7 var httpStatusCode = ex.GetHttpCode(); 8 9 if (httpStatusCode == 404) 10 { 11 var httpContext = (sender as MvcApplication).Context; 12 13 httpContext.ClearError(); 14 httpContext.Response.Clear(); 15 httpContext.Response.StatusCode = 404; 16 ServiceFocus.LogService.AddLog(ex); 17 18 httpContext.Response.ContentType = "text/html; charset=utf-8"; 19 var routeData = new RouteData(); 20 routeData.Values["controller"] = "Sys"; 21 routeData.Values["action"] = "NotFound"; 22 var requestContext = new RequestContext(new HttpContextWrapper(httpContext), routeData); 23 var controller = ControllerBuilder.Current.GetControllerFactory().CreateController(requestContext, "Sys") as SysController; 24 //controller.ViewData.Model=model; 25 (controller as IController).Execute(requestContext); 26 ControllerBuilder.Current.GetControllerFactory().ReleaseController(controller); 27 } 28 }