1.配置文件:webConfig中配置经常出现的错误页面:

<system.web>节点下添加 <customErrors>节点,在 <customErrors>节点下配置<error>错误信息,如下:

  1. <system.web>
  2. <customErrors mode="On" defaultRedirect="~/Html_Tools/Html_UI/Error_404.htm">
  3. <error statusCode="404" redirect="~/Html_Tools/Html_UI/Error_404.htm" />
  4. <error statusCode="500" redirect="~/Html_Tools/Html_UI/Error_500.htm" />
  5. </customErrors>
  6. <!--发布时改为false,开发时为true-->
  7. <compilation debug="true" targetFramework="4.6" />
  8. <!--配置文件传输大小限制-->
  9. <httpRuntime maxRequestLength="51200" targetFramework="4.6" />
  10. </system.web>

2.自定义异常处理错误页面:

ASP.Net MVC3中如果配置文件出错了,怎么跳转到自定义的错误页,现在参考网上的档案是说

添加 如下配置文件,并且在路径Views/Shared/下添加Error页面,测试下没有用的,请大家看看有什么好的建议啊,谢谢了啊!

<system.web>

<customErrors mode="On" defaultRedirect="/Base/Error/">
   </customErrors>

</system.web>

MVC根本不会理睬web.config中的customErrors,默认是由HandleErrorAttribute处理的,显示的是/Views/Shared/Error.cshtml中内容。

mvc中,可以用过滤器来实现异常处理

1.在Global.asax文件,

  1. //1.在Global.asax文件中
  2. public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
  3. filters.Add(new ExceptionFilterAttribute()); //自己定义的过滤器
  4. }
  5. /// <summary>
  6. /// 2.自己定义的过滤器 处理异常跳转错误页
  7. /// 捕获异常 跳转到错误页
  8. /// </summary>
  9. public class ExceptionFilterAttribute : HandleErrorAttribute {
  10. public override void OnException(ExceptionContext filterContext) {
  11. base.OnException(filterContext);
  12. string excepitonInfo = filterContext.Exception.ToString();
  13. //LogHelper.OutputLog(excepitonInfo);//记录日志
  14. filterContext.HttpContext.Response.Redirect("~/Html_Tools/Html_UI/Error.htm");
  15. }
  16. }

当ASP.NET MVC程序出现了异常,怎么处理更加规范?

1. 最简单的方法是设置<customErrors/>节点

<customErrors>节点用 于定义一些自定义错误信息的信息。此节点有Mode和defaultRedirect两个属性,其中defaultRedirect属性是一个可选属性, 表示应用程序发生错误时重定向到的默认URL,如果没有指定该属性则显示一般性错误。Mode属性是一个必选属性,它有三个可能值,它们所代表的意义分别 如下:
On 表示在本地和远程用户都会看到自定义错误信息。
Off 禁用自定义错误信息,本地和远程用户都会看到详细的错误信息。
RemoteOnly 表示本地用户将看到详细错误信息,而远程用户将会看到自定义错误信息。

这里有必要说明一下本地用户和远程用户的概念。当
我们访问asp.net应用程时所使用的机器和发布asp.net应用程序所使用的机器为同一台机器时成为本地用户,反之则称之为远程用户。在开发调试阶
段为了便于查找错误Mode属性建议设置为Off,而在部署阶段应将Mode属性设置为On或者RemoteOnly,以避免这些详细的错误信息暴露了程
序代码细节从而引来黑客的入侵。

<error>子节点

在<customErrors>节点
下还包含有<error>子节点,这个节点主要是根据服务器的HTTP错误状态代码而重定向到我们自定义的错误页面,注意要
使<error>子节点下的配置生效,必须将<customErrors>节点节点的Mode属性设置为“On”。下面是一个例
子:

  1. <customErrors mode="On" defaultRedirect="~/Html_Tools/Html_UI/Error_404.htm">
  2. <error statusCode="404" redirect="~/Html_Tools/Html_UI/Error_404.htm" />
  3. <error statusCode="500" redirect="~/Html_Tools/Html_UI/Error_500.htm" />
  4. </customErrors>

在上面的配置中如果用户访问的页面不存在就会跳转到404.htm页面,如果服务端的内部错误的页面则会跳转到500.htm页面,500.htm和404.htm页面都是我们自己添加的页面,我们可以在页面中给出友好的错误提示。

2. 使用过滤器HandleErrorAttribute

随着ASP.NET MVC版本的更新,出现了HandleErrorAttribute,使用Filter以AOP的思想实现了针对于Action的异常处理。使用此 Filter后,当程序中出现异常的时候,会去封装这些异常信息,然后路由自动转到该Controller对应的Error.cshtml中,如果此路径 下没有改文件,则会到shared目录中寻找此文件。另外一个相关的是在Global.asax中的protected void Application_Error(object sender, EventArgs e)方法,是捕捉异常的最后一道防线,也就是说,这是最高层次的异常捕获处理逻辑。 使用HandleErrorAttribute后,找到了Error.cshtml,则此时异常已经被捕获处理,所以不会再次被 Application_Error捕获处理。此外,可以通过@model HandleErrorInfo 在Error.cshtml中定制显示异常信息。有一点需要注意的是,HandleErrorAttribute是在customErrors基础之上的,如果想使用HandleErrorAttribute,customErrors的Mode必须要设置为On或RemoteOnly. 否则,HandleErrorAttribute将不起作用。

3. 自定义显示路径

如果遇到异常后不单单是要自定义异常显示,而且还 需要进行日志记录。此时,可以通过继承扩展HandleErrorAttribute来实现新的Filter,然后在lobal.ascx中对所有的 Action进行注册,filters.Add(new MyHandleErrorAttribute()).在这里详细说明一下另一种方式。我们可以写一个专门的Controller和Action来进行异 常发生时的路由设置.

  1. public class UtilityController : Controller
  2. {
  3. public ActionResult Error()
  4. {
  5. return View();
  6. }
  7.  
  8. public ActionResult PageNotFound()
  9. {
  10. return View();
  11. }
  12. }

当出现异常的时候,把异常抛到最顶端,由Application_Error统一处理。这里的统一处理就包括,记录日志,重新进行页面定向等。

  1. protected void Application_Error(object sender, EventArgs e)
  2. {
  3. var ex = Server.GetLastError();
  4. Log.Error(ex); //记录日志信息
  5. var httpStatusCode = (ex is HttpException) ? (ex as HttpException).GetHttpCode() : ; //这里仅仅区分两种错误
  6. var httpContext = ((MvcApplication)sender).Context;
  7. httpContext.ClearError();
  8. httpContext.Response.Clear();
  9. httpContext.Response.StatusCode = httpStatusCode;
  10. var shouldHandleException = true;
  11. HandleErrorInfo errorModel;
  12.  
  13. var routeData = new RouteData();
  14. routeData.Values["controller"] = "Utility";
  15.  
  16. switch (httpStatusCode)
  17. {
  18. case :
  19. routeData.Values["action"] = "PageNotFound";
  20. errorModel = new HandleErrorInfo(new Exception(string.Format("No page Found", httpContext.Request.UrlReferrer), ex), "Utility", "PageNotFound");
  21. break;
  22.  
  23. default:
  24. routeData.Values["action"] = "Error";
  25. Exception exceptionToReplace = null; //这里使用了EntLib的异常处理模块的一些功能
  26. shouldHandleException = ExceptionPolicy.HandleException(ex, "LogAndReplace", out exceptionToReplace);
  27. errorModel = new HandleErrorInfo(exceptionToReplace, "Utility", "Error");
  28. break;
  29. }
  30.  
  31. if (shouldHandleException)
  32. {
  33. var controller = new UtilityController();
  34. controller.ViewData.Model = errorModel; //通过代码路由到指定的路径
  35. ((IController)controller).Execute(new RequestContext(new HttpContextWrapper(httpContext), routeData));
  36. }
  37. }

原文参考引自:http://blog.csdn.net/zjlovety/article/details/48734791

MVC 自定义异常错误页面处理的更多相关文章

  1. 在ASP.NET MVC自定义错误页面

    异常处理跳转页面 第一步,在项目的Web.config文件中找到节点<system.web> 在此节点下添加配置(Error为定义的控制器也可以多添加些error标签用于区分不同的错误) ...

  2. ASP.NET MVC 自定义错误页面心得

    自定义错误页面的目的,就是为了能让程序在出现错误/异常的时候,能够有较好的显示体验. 所以,首先要先了解,我们可以在哪里捕获异常. 当程序发生错误的时候,我们可以在两个地方捕获: Global里面的A ...

  3. MVC 自定义 错误页面

    很多时候,我们需要自定义错误页面,用来当发生异常后引导用户进入一个比较友好的错误页面. 在这里,我归结一下我常用的2个方案 1   通过Global.asax 文件来处理异常信息(这个不管是 MVC ...

  4. MVC自定义错误页面

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

  5. Asp.net MVC 自定义错误页面以及return HttpNotFound遇到的问题

    今天在处理mvc 项目404和500页面时,发现我以前比较喜欢用的Return HttpNotFound()没有跳转到我在webconfig中配置的自定义404页面,而且也不会去执行Global中的A ...

  6. Spring MVC自定义错误页面

    在web.xml中添加: <error-page(其他属性404...省略咯)> <location>/error</location> </error-pa ...

  7. .net mvc 自定义错误页面

    1.Global.asax.cs中,加入如下代码 protected void Application_Error(Object sender, EventArgs e) { Exception ex ...

  8. ASP.NETMVC自定义错误页面真的简单吗?

    Note:文章前半部分翻译自 http://benfoster.io/blog/aspnet-mvc-custom-error-pages ,着急的可直接看总结~ 如果你在设置asp.net mvc自 ...

  9. Spring MVC错误页面配置

    当前SpringMVC非常流行,在大多数情况,我们都需要自定义一些错误页面(例如:401, 402, 403, 500...),以便更友好的提示.对于spring mvc,这些当然是支持自定义的,sp ...

随机推荐

  1. swift 闭包+嵌套函数+extension+单例+嵌套函数+??

    //: Playground - noun: a place where people can play import UIKit //*******************嵌套函数********* ...

  2. 微信公众号 SDK

    <?php /* 方倍工作室 http://www.fangbei.org/ CopyRight 2015 All Rights Reserved */ define("TOKEN&q ...

  3. lua元表和元方法 《lua程序设计》 13章 读书笔记

    lua中每个值都有一个元表,talble和userdata可以有各自独立的元表,而其它类型的值则共享其类型所属的单一元表.lua在创建table时不会创建元表. t = {} print(getmet ...

  4. magento转移服务器和magento建立多站点总结

    magento转移服务器和magento建立多站点总结第一. 我们首先要做的就是把服务器上的magento转移到本地上来.详细步骤:1. 直接用magento的备份系统把网上数据库备份.如图:2. 数 ...

  5. Open vSwitch FAQ (二)

    Configuration Problems Q: I created a bridge and added my Ethernet port to it, using commands like t ...

  6. python numpy 模块简单介绍

    用python自带的list去处理数组效率很低, numpy就诞生了, 它提供了ndarry对象,N-dimensional object, 是存储单一数据类型的多维数组,即所有的元素都是同一种类型. ...

  7. Python 新手常犯错误(第二部分)

    转发自:http://blog.jobbole.com/43826/ 在之前几个月里,我教一些不了解Python的孩子来慢慢熟悉这门语言.渐渐地,我发现了一些几乎所有Python初学者都会犯的错误,所 ...

  8. [转载] C++ string, const char*, char* 之间互相转换

    1, string转const char* 类型 string str = "abcdef"; const char* con_str = string.c_str() 2, co ...

  9. poj 3264 线段树 求区间最大最小值

    Description For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same ...

  10. c++有默认参数的函数---4

    原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 1.默认参数的目的 C++可以给函数定义默认参数值.通常,调用函数时,要为函数的每个参数给定对应的实参. ...