一、概述

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(),);
}

在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 因为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 == )
{
filterContext.HttpContext.Response.Redirect("~/SysError/404");
}
else if (DataEroorCode == )
{
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(),); filters.Add(new HandleErrorAttribute(),); }

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

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

四、遇到问题总结

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 == || httpCode == )
{
Response.StatusCode = ;//在IIS中配置自定义404页面
Server.ClearError();
return;
}
Logger.Default.Error("Application_Error_" + httpCode, httpError);
} //对于路径错误不记录日志,并都以自定义404页面响应
if (lastError.TargetSite.ReflectedType == typeof(System.IO.Path))
{
Response.StatusCode = ;
Server.ClearError();
return;
} Logger.Default.Error("Application_Error", lastError);
Response.StatusCode = ;
Server.ClearError();
}
}

实现样式多样,只要实现功能就是最好;

MVC4 自定义错误页面(三)的更多相关文章

  1. MVC4 自定义错误页面(转)

    一.概述 MVC4框架自带了定义错误页,该页面位于Shared/Error,该页面能够显示系统未能捕获的异常,如何才能使用该页面: 二.使用步骤: 1.配置WebConfig文件,在System.We ...

  2. ASP.NET全局错误处理和异常日志记录以及IIS配置自定义错误页面

    应用场景和使用目的 很多时候,我们在访问页面的时候,由于程序异常.系统崩溃会导致出现黄页.在通常的情况下,黄页对于我们来说,帮助是极大的,因为它可以帮助我们知道问题根源,甚至是哪一行代码出现了错误.但 ...

  3. Spring Boot自定义错误页面,Whitelabel Error Page处理方式

    我已经是Spring Framework框架的忠实粉丝.对于企业软件开发者来说它提供了对常见问题的通用解决方案,包括那些你在未来开发中没有意识到的问题.但是,它构建的J2EE项目变得比较臃肿,需要被一 ...

  4. ASP.NET自定义错误页面

    ASP.NET自定义错误页面 ASP.NET 提供三种用于在出现错误时捕获和响应错误的主要方法:Page_Error 事件.Application_Error 事件以及应用程序配置文件 (Web.co ...

  5. ASP.NET网站中设置404自定义错误页面

    在用ASP.NET WebForm开发一个网站时,需要自定义404错误页面. 做法是这样的 在网站根目录下建立了一个404.html的错误页面,然后在Global.asax文件中,加入如下代码: &l ...

  6. .net自定义错误页面实现升级篇

    问题描述: 在上一篇博文 ".net自定义错误页面实现" 中已经介绍了在.net中如何实现自定义错误页面实现(有需要者可以去上一篇博文了解),单纯按照上一篇博文那样设置,能够实现所 ...

  7. (后端)Spring Boot自定义错误页面,Whitelabel Error Page处理方式(转)

    我已经是Spring Framework框架的忠实粉丝.对于企业软件开发者来说它提供了对常见问题的通用解决方案,包括那些你在未来开发中没有意识到的问题.但是,它构建的J2EE项目变得比较臃肿,需要被一 ...

  8. MVC自定义错误页面

    MVC异常处理主要有三种方案:1.基于HandleErrorAttribute重写OnException方法:2.基于Global.apsx添加Application_Error方法:3.直接在Web ...

  9. C#不用union,而是有更好的方式实现 .net自定义错误页面实现 .net自定义错误页面实现升级篇 .net捕捉全局未处理异常的3种方式 一款很不错的FLASH时种插件 关于c#中委托使用小结 WEB网站常见受攻击方式及解决办法 判断URL是否存在 提升高并发量服务器性能解决思路

    C#不用union,而是有更好的方式实现   用过C/C++的人都知道有个union,特别好用,似乎char数组到short,int,float等的转换无所不能,也确实是能,并且用起来十分方便.那C# ...

随机推荐

  1. hiho #1372:平方求 (bfs)

    #1372 : 平方求和 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 对于一个非负整数n,最少需要几个完全平方数,使其和为n? 输入 输入包含多组数据.对于每组数据: ...

  2. 剑指Offer 跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法.   解题思路: f(n)=f(n-1)+f(n-2); f(1)=1,f(2)=2;   AC代码 ...

  3. OpenCV进阶之路:神经网络识别车牌字符

    1. 关于OpenCV进阶之路 前段时间写过一些关于OpenCV基础知识方面的系列文章,主要内容是面向OpenCV初学者,介绍OpenCV中一些常用的函数的接口和调用方法,相关的内容在OpenCV的手 ...

  4. Delphi Dll 消息处理

    转载:http://blog.csdn.net/lailai186/article/details/8770643 事情的导火线是GIF图片的显示. 在应用程序中, 利用三方的GIFImage.pas ...

  5. PHP输出控制(Output Control)函数

    ob_start 此函数将打开输出缓冲.当输出缓冲激活后,脚本将不会输出内容(除http标头外),相反需要输出的内容被存储在内部缓冲区中. 内部缓冲区的内容可以用 ob_get_contents() ...

  6. sql server2008 字符串的替换

    DECLARE @TSql VARCHAR(MAX) SET @TSql =REPLACE(@TSql,'#PrimaryKey','0'); 1,@TSql将要替换的完整字符串 2,#Primary ...

  7. IDEA 新建文件默认加入CVS

    是要先add,不过可以设置创建的文件都默认 add的.修改默认值看下图:打开系统设置,找到 Version Control 设置选项: 在 When files are created 选项中选择第二 ...

  8. redis安装与参数说明

    redis安装与参数说明 博客分类: redis redis 1.下载tcl8.6.1-src.tar.gz 和 redis-2.8.6.tar.gz: 2.安装: 1).安装tcl Java代码 收 ...

  9. Hexo

    Hexo Hexo is a fast, simple & powerful blog framework powered by Node.js.

  10. ios 在storyboard 和 xib中,显示自定义view的预览效果

    发现FSCalendar这个控件能在xib中显示预览效果,是怎么实现的呢?其中涉及的知识又有哪些? 主要就是IBInspectable 和 IB_DESIGNABLE 先看 IBInspectable ...