Asp.net MVC 自定义错误页面以及return HttpNotFound遇到的问题
2015-10-17 23:19
676 查看
今天在处理mvc 项目404和500页面时,发现我以前比较喜欢用的Return HttpNotFound()没有跳转到我在webconfig中配置的自定义404页面,而且也不会去执行Global中的Application_Error方法,经过一番查阅资料,发现这个问题得去想别的办法去做,具体的做法有三种,如下:
1.放弃Return HttpNotFound(),适用throw new HttpException(404, "page not found");
2.让所有的Controller继承自BaseController,然后BaseController重写HttpNotFound方法,代码如下:
3.使用Fliter来处理异常,代码如下;
1.放弃Return HttpNotFound(),适用throw new HttpException(404, "page not found");
2.让所有的Controller继承自BaseController,然后BaseController重写HttpNotFound方法,代码如下:
protected override HttpNotFoundResult HttpNotFound(string statusDescription) { this.Response.StatusCode = 404; this.Response.TrySkipIisCustomErrors = true; Response.Clear(); Response.Redirect("~/FileNotFound.html"); Response.End(); return null; }
3.使用Fliter来处理异常,代码如下;
public class CustomViewForHttpStatusResultFilter : IResultFilter, IExceptionFilter { string viewName; int statusCode; #region Ctor public CustomViewForHttpStatusResultFilter(HttpStatusCodeResult prototype, string viewName) : this(prototype.StatusCode, viewName) { } public CustomViewForHttpStatusResultFilter(int statusCode, string viewName) { this.viewName = viewName; this.statusCode = statusCode; } #endregion public void OnResultExecuted(ResultExecutedContext filterContext) { HttpStatusCodeResult httpStatusCodeResult = filterContext.Result as HttpStatusCodeResult; //比较重要的一句,当请求完成后,发现 if (httpStatusCodeResult != null && httpStatusCodeResult.StatusCode == statusCode) { ExecuteCustomViewResult(filterContext.Controller.ControllerContext); } } public void OnResultExecuting(ResultExecutingContext filterContext) { } public void OnException(ExceptionContext filterContext) { HttpException httpException = filterContext.Exception as HttpException; if (httpException != null && httpException.GetHttpCode() == statusCode) { ExecuteCustomViewResult(filterContext.Controller.ControllerContext); // This causes ELMAH not to log exceptions, so commented out //filterContext.ExceptionHandled = true; } } void ExecuteCustomViewResult(ControllerContext controllerContext) { ViewResult viewResult = new ViewResult(); viewResult.ViewName = viewName; viewResult.ViewData = controllerContext.Controller.ViewData; viewResult.TempData = controllerContext.Controller.TempData; viewResult.ExecuteResult(controllerContext); controllerContext.HttpContext.Response.TrySkipIisCustomErrors = true; } }
相关文章推荐
- 黑马程序员_Socket网络通信
- 黑马程序员_http请求响应参数解读
- 实现三级缓存
- shell学习-转自http://c.biancheng.net/cpp/shell/
- android开源框架android-async-http使用案例介绍
- ListView显示网络数据出现数据堆积问题,求助!求助!!求助!!!
- 真实流量压测工具 tcpcopy应用浅析
- 以太网及IP数据报,tcp数据报格式分析
- java网络编程之 UDP的使用
- 基于HttpClient的java后台访问URL
- qt与java实现简单的网络通信
- Mina、Netty、Twisted一起学习(三):TCP前缀固定大小的消息(Header)
- 《TCP/IP详解 卷一》读书笔记-----动态路由协议
- UDP TCP区别
- JAVA基础学习之Http(含JSON)网络编程
- http-web基础
- 网络抓包教程
- SQLCONNECTION使用HTTP通信协议和中间件连接
- BroadcastReceiver之动态注册监听网络状态变化
- ASP.NET WebAPI 06 HttpMessageHandler管道