Asp.net MVC 自定义错误页面以及return HttpNotFound遇到的问题
今天在处理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方法,代码如下:
protected override HttpNotFoundResult HttpNotFound(string statusDescription)
{
this.Response.StatusCode = ;
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;
}
}
Asp.net MVC 自定义错误页面以及return HttpNotFound遇到的问题的更多相关文章
- ASP.NET MVC 自定义错误页面心得
自定义错误页面的目的,就是为了能让程序在出现错误/异常的时候,能够有较好的显示体验. 所以,首先要先了解,我们可以在哪里捕获异常. 当程序发生错误的时候,我们可以在两个地方捕获: Global里面的A ...
- 在ASP.NET MVC自定义错误页面
异常处理跳转页面 第一步,在项目的Web.config文件中找到节点<system.web> 在此节点下添加配置(Error为定义的控制器也可以多添加些error标签用于区分不同的错误) ...
- MVC自定义错误页面
MVC异常处理主要有三种方案:1.基于HandleErrorAttribute重写OnException方法:2.基于Global.apsx添加Application_Error方法:3.直接在Web ...
- MVC 自定义 错误页面
很多时候,我们需要自定义错误页面,用来当发生异常后引导用户进入一个比较友好的错误页面. 在这里,我归结一下我常用的2个方案 1 通过Global.asax 文件来处理异常信息(这个不管是 MVC ...
- ASP.net MVC自定义错误处理页面的方法
在ASP.NET MVC中,我们可以使用HandleErrorAttribute特性来具体指定如何处理Action抛出的异常.只要某个Action设置了HandleErrorAttribute特性,那 ...
- Spring MVC自定义错误页面
在web.xml中添加: <error-page(其他属性404...省略咯)> <location>/error</location> </error-pa ...
- .net mvc 自定义错误页面
1.Global.asax.cs中,加入如下代码 protected void Application_Error(Object sender, EventArgs e) { Exception ex ...
- ASP.NETMVC自定义错误页面真的简单吗?
Note:文章前半部分翻译自 http://benfoster.io/blog/aspnet-mvc-custom-error-pages ,着急的可直接看总结~ 如果你在设置asp.net mvc自 ...
- ASP.NET网站中设置404自定义错误页面
在用ASP.NET WebForm开发一个网站时,需要自定义404错误页面. 做法是这样的 在网站根目录下建立了一个404.html的错误页面,然后在Global.asax文件中,加入如下代码: &l ...
随机推荐
- Maven --- <distributionManagement>标签
1.<distributionManagement>的作用: 负责管理构件的发布.这是一个环境变量 <downloadUrl> URL </downloadUrl& ...
- log4j的简单使用
引入jar包org.apache.log4j.Logger,项目src目录下建立一个log4j.properties配置文件 log4j.rootLogger=INFO,A1,R log4j.appe ...
- Win7下硬盘安装Ubuntu双系统
一. 准备工作 1. 下载ubuntu镜像文件:Ubuntu-14.04.5-desktop-amd64.iso(4G及以上内存建议64位) 注意这个amd并不是指amd芯片. 2. 下载硬盘分区工具 ...
- SZU5
A - Couple doubi 这种题不要想复杂,直接找规律.找不出规律就打表找规律 #include <iostream> #include <string> #inclu ...
- java利用直方图实现图片对比
需求 实现两张图对比,找出其中不同的部分. 分析 首先将大图切片,分成许多小图片.然后进行逐个对比,并设定相似度阈值,判断是否是相同.最后整理,根据生成数组标记不同部分.如果切片足够小,便越能精确找出 ...
- VC 在调用main函数之前的操作
title: VC 在调用main函数之前的操作 tags: [VC++, 反汇编, C++实现原理] date: 2018-09-16 10:36:23 categories: VC++反汇编分析 ...
- Python OOP面向对象
一.什么是面向对象的程序设计 1.面向过程 程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式. 优点是 ...
- after() 和 remove() 实现替换
<div class="replacedDiv">this is the replaced div</div> <script> ...
- php基础部分(1)
PHP 输出文本的基础指令:echo 和 print.echo和print的区别echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)echo 输出一 ...
- SQL Server中的游标CURSOR
游标是邪恶的! 在关系数据库中,我们对于查询的思考是面向集合的.而游标打破了这一规则,游标使得我们思考方式变为逐行进行.对于类C的开发人员来着,这样的思考方式会更加舒服. 正常面向集合的思维方式是: ...