MVC4 自定义错误页面(转)
一、概述
MVC4框架自带了定义错误页,该页面位于Shared/Error,该页面能够显示系统未能捕获的异常,如何才能使用该页面;
二、使用步骤:
1、配置WebConfig文件,在System.Web节点下加上
<customErrors mode="On" defaultRedirect="~/Shared/Error" />
翻阅一些大神写的博客,在他们的博客中指出defaultRedirect是指向错误页面的URL,可是经过本人测试的时候,发现在MVC4中这种说法并不准,在MVC中,有一套默认的机制(这部分代码被微软封装,无法阅读),该机制能够把错误信息通过HandleError属性指向Shared/Error页面,也就是说配置System.Web节点,可以省略defaultRedirect
customErrors mode="On"/>
2、Global文件,添加HandleEffor属性
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute(),1);
}
在Global定义之后,也就是全局定义,其他Action和Control都不需要定义,默认使用HandleError控制属性;
这样就可以使用MVC4中系统默认的Error页面;
三、自定义错误页面
有些时候,我们想使用自定义的错误页面,该怎么处理那,翻页其他大牛写的博客,看到有这种方式,自定义属性Class继承FileterAttribute,重写OnException方法,代码如下

public class BaseHandleErrorAttribute : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
if (filterContext.ExceptionHandled == true)
{
HttpException httpExce = filterContext.Exception as HttpException;
if (httpExce != null && httpExce.GetHttpCode() != 500)//为什么要特别强调500 因为MVC处理HttpException的时候,如果为500 则会自动将其ExceptionHandled设置为true,那么我们就无法捕获异常
{
return;
}
}
Exception exception = filterContext.Exception;
if (exception != null)
{
HttpException httpException = exception as HttpException;
if (httpException != null)
{
//网络错误
filterContext.Controller.ViewBag.UrlRefer = filterContext.HttpContext.Request.UrlReferrer;
int DataEroorCode = httpException.GetHttpCode();
if (DataEroorCode == 404)
{
filterContext.HttpContext.Response.Redirect("~/SysError/404");
}
else if (DataEroorCode == 500)
{
filterContext.HttpContext.Response.Redirect("~/SysError/500");
}
else
filterContext.HttpContext.Response.Redirect("~/SysError/" + DataEroorCode); //写入日志 记录
filterContext.ExceptionHandled = true;//设置异常已经处理
}
else
{
//编程或者系统错误,不处理,留给HandError处理
}
}
}
}

将该属性注册到全局Global中,定义铺货异常等级

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new BaseHandleErrorAttribute(),0); filters.Add(new HandleErrorAttribute(),1); }

当然我们也可以不使用MVC框架自带的Error页面,定义一个Error404,如何使用这个页面那 ,起始也挺简单的,代码如下

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new BaseHandleErrorAttribute(),0); filters.Add(new HandleErrorAttribute(View="Error404"),1); }

四、遇到问题总结
1、遇到重定向,URL指向aspxerrorpath,如:
http://local:8090/error/error.htm?aspxerrorpath=/cmt/p/3789549.html
出现这个问题的主要原因:
1>、Global没有添加
filters.Add(new HandleErrorAttribute(View="Error404"))
2>、Shared目录没有Error页面;
3>、如果存在Error页面,但是页面是用了布局Layout,组成的Error页面存在错误,比如ModeView数据不对等,需要详查;
2、自定义Error的其他方式
翻页其他大牛写的文章时候,返现也可以使用Gloal中的Application_Error事件方法处理,比如博主@dudu写的异常处理方式;
代码粘贴如下:

protected void Application_Error(Object sender, EventArgs e)
{
var lastError = Server.GetLastError();
if (lastError != null)
{
var httpError = lastError as HttpException;
if (httpError != null)
{
//ASP.NET的400与404错误不记录日志,并都以自定义404页面响应
var httpCode = httpError.GetHttpCode();
if (httpCode == 400 || httpCode == 404)
{
Response.StatusCode = 404;//在IIS中配置自定义404页面
Server.ClearError();
return;
}
Logger.Default.Error("Application_Error_" + httpCode, httpError);
} //对于路径错误不记录日志,并都以自定义404页面响应
if (lastError.TargetSite.ReflectedType == typeof(System.IO.Path))
{
Response.StatusCode = 404;
Server.ClearError();
return;
} Logger.Default.Error("Application_Error", lastError);
Response.StatusCode = 500;
Server.ClearError();
}
}

实现样式多样,只要实现功能就是最好;
原文:http://www.cnblogs.com/xibei666/p/5153807.html
MVC4 自定义错误页面(转)的更多相关文章
- MVC4 自定义错误页面(三)
一.概述 MVC4框架自带了定义错误页,该页面位于Shared/Error,该页面能够显示系统未能捕获的异常,如何才能使用该页面: 二.使用步骤: 1.配置WebConfig文件,在System.We ...
- ASP.NET Core中显示自定义错误页面-增强版
之前的博文 ASP.NET Core中显示自定义错误页面 中的方法是在项目中硬编码实现的,当有多个项目时,就会造成不同项目之间的重复代码,不可取. 在这篇博文中改用middleware实现,并且放在独 ...
- ASP.NET Core中显示自定义错误页面
在 ASP.NET Core 中,默认情况下当发生500或404错误时,只返回http状态码,不返回任何内容,页面一片空白. 如果在 Startup.cs 的 Configure() 中加上 app. ...
- ASP.NET全局错误处理和异常日志记录以及IIS配置自定义错误页面
应用场景和使用目的 很多时候,我们在访问页面的时候,由于程序异常.系统崩溃会导致出现黄页.在通常的情况下,黄页对于我们来说,帮助是极大的,因为它可以帮助我们知道问题根源,甚至是哪一行代码出现了错误.但 ...
- haproxy实现自定义错误页面的内容
现在利用haproxy实现自定义的haproxy的错误页面 我们现在实现自定义错误页面有以下的方法: 一种是自定义错误页面 haproxy.conf defaults errorfile 404 /e ...
- ASP.NETMVC自定义错误页面真的简单吗?
Note:文章前半部分翻译自 http://benfoster.io/blog/aspnet-mvc-custom-error-pages ,着急的可直接看总结~ 如果你在设置asp.net mvc自 ...
- Spring Boot自定义错误页面,Whitelabel Error Page处理方式
我已经是Spring Framework框架的忠实粉丝.对于企业软件开发者来说它提供了对常见问题的通用解决方案,包括那些你在未来开发中没有意识到的问题.但是,它构建的J2EE项目变得比较臃肿,需要被一 ...
- ASP.NET自定义错误页面
ASP.NET自定义错误页面 ASP.NET 提供三种用于在出现错误时捕获和响应错误的主要方法:Page_Error 事件.Application_Error 事件以及应用程序配置文件 (Web.co ...
- ASP.NET网站中设置404自定义错误页面
在用ASP.NET WebForm开发一个网站时,需要自定义404错误页面. 做法是这样的 在网站根目录下建立了一个404.html的错误页面,然后在Global.asax文件中,加入如下代码: &l ...
随机推荐
- SpringMVC的注解开发入门
1.Spring MVC框架简介 支持REST风格的URL 添加更多注解,可完全注解驱动 引入HTTP输入输出转换器(HttpMessageConverter) 和数据转换.格式化.验证框架无缝集成 ...
- 高性能 Socket 组件 HP-Socket v3.1.3 正式发布
HP-Socket 是一套通用的高性能 Windows Socket 组件,提供服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP/ ...
- react引用ant的table组件
import React from 'react';import '../../css/uicss/UI.css';import 'antd/lib/style/index.less';import ...
- 如何提升代码编译的速度 iOS
前阵子有遇到代码编译速度慢的问题,特别是在swift和object-c混编的过程中问题很突显. 网上找到一篇蛮好的文章里面又一些解决方法 推荐一下 http://www.open-open.com/l ...
- 使用私有Pod Spec的类库--提高公司开发效率
前言 找了这么长时间,再次开始去尝试Cocoapods了.前面已经写过一篇关于如何把自己的Github上的代码库添加Cocoapods支持.现在就让我们看一下如果搭建私有的Spec吧. 之所以构建私有 ...
- Android Studio 导入项目 出现安装Error:Cause: failed to find target with hash string 'android-23' 等错误
今天 在导入 一个新项目时 : 出现了这个错 Error:Cause: failed to find target with hash string 'android-23' in: C:\Use ...
- Watir-WebDriver关于交互式等待方法,告别一味sleep时代
有交互就有等待,等待页面加载完毕的时间怎么处理呢? 有人说sleep: sleep N #等待N秒后继续执行 怎么才能告别毫无意义的命令呢? 接下来介绍一下Watir-Webdriver为我们提供等待 ...
- 开发至今,终于开始测试bug,可以省心点了
今天遇到一个特别奇葩的问题 IOSSDK9.1 Xcode7.1.1 使用表控制器UITableViewController来刷新表时, 之前对表的frame进行的修改,都会被恢复,沾满整个屏幕. 目 ...
- ASP.NET MVC 的 WebGrid 的 6 个重要技巧 【已翻译100%】
ASP.NET MVC 中 WebGrid 的 6 个重要技巧 https://www.oschina.net/translate/webgrid-in-asp-net-mvc-important-t ...
- [转]oracle 实施方法论学习心得
本周由部门新入职的同事为我们分享oracle实施方法论,本次重点围绕项目启动会来做介绍,并着重介绍了oracle与我们不一样的地方.收获颇丰,简单总结几个值得学习借鉴的要点: 1. 细节 ...