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 ...
随机推荐
- 梯度寻优与logistic算法
一.一些基本概念 最优化:在给定约束之下如何寻求某些因素(的量),以使某一(或某些)指标达到最优.高中学过的线性规划就是一类典型的最优化问题. 凸集:在集合空间中,凸集就是一个向四周凸起的图形.用数学 ...
- 第5章 css与背景相关的样式background
background-origin 设置元素背景图片的原始起始位置. 语法: background-origin : border-box | padding-box | content-box; 参 ...
- 【Android】移动项目位置
一.前言 有时候,我们新建一个项目后,因为一些原因想要重新移动项目到别的文件夹.然而,移动到新的文件夹后,却发现之前好好的项目运行不了.点击运行后,弹出如下对话框. Installation fai ...
- EditText的setInputType方法里面应该填什么?
转自CSDN:http://blog.csdn.net/u014158743/article/details/52488010 | 以密码类型(password)为例 android:inputTyp ...
- lua中的weak table
weakTable = {} weakTable[] = function() print("i am the first element") end weakTable[] = ...
- 八、word-space与letter-space
1.worde-space是增加或减少单词之间的空白,即字间距.例如: this is a bag 2.letter-space是增加或减少字符间的空白,即字符间距.例如 ...
- vs2013 c# 中调用 c 编写的dll出错的可能错误
先说出错原因: 堆栈调用顺序 解决办法: 使用 __stdcall 或 使用C#属性 CallingConvention 起因是我想在c#中调用c函数结果出错了 如下 C 头文件 ...
- react-native-echarts
react-native-echarts是react native结合百度echart的图表,集成的一个图表插件. github地址:https://github.com/zhangxinagjunH ...
- 测试mysql性能工具
mysqlslap mysqlslap可以模拟服务器的负载,并输出计时信息.它包含在MySQL 5.1 的发行包中,应该在MySQL 4.1或者更新的版本中都可以使用.测试时可以执行并发连接数,并指定 ...
- 【Leetcode】【Medium】Subsets
Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset must be ...