在Asp.Net的Global.asax中Application_Error跳转到自定义错误页无效的办法

在开发Asp.Net系统的时候,我们很多时候希望系统发生错误后能够跳转到一个自定义的错误页面,于是我们经常会在Global.asax中的Application_Error方法中使用Response.Redirect方法跳转到自定义错误页,但有时候(特别是当站点部署到IIS后)Application_Error方法中使用Response.Redirect方法会失效,当Asp.Net发生异常错误后还是显示出来的是Asp.Net的默认错误黄页。其根本原因是尽管我们在Application_Error方法中使用了Response.Redirect方法,但是当系统发生异常错误后Asp.Net认为异常并没有被处理,所以Asp.Net不会跳转到Application_Error方法中Response.Redirect指向的页面,还是会最终会跳转到Asp.Net的默认错误黄页。解决这个问题的办法很简单就是在Application_Error方法中使用Response.Redirect做跳转前,先调用Server.ClearError()方法告诉Asp.Net系统发生的异常错误已经被处理了,这样再调用Response.Redirect方法系统就会跳转到自定义错误页面了。

下面是一段示例代码:

 1 using System;
 2 using System.Web;
 3 using System.Web.Mvc;
 4 using System.Web.Routing;
 5 using System.Web.Http;
 6
 7 namespace RedirectToErrorPage
 8 {
 9     public class Global : HttpApplication
10     {
11         void Application_Start(object sender, EventArgs e)
12         {
13             // Code that runs on application startup
14             AreaRegistration.RegisterAllAreas();
15             GlobalConfiguration.Configure(WebApiConfig.Register);
16             RouteConfig.RegisterRoutes(RouteTable.Routes);
17         }
18
19         //尽管我们在Global.asax的Application_Error方法中使用了Response.Redirect方法做页面重定向,但是当系统发生错误时Asp.Net认为错误没有被处理,所以最后页面还是会被重定向到Asp.Net的默认错误黄页,而不会跳转到我们在Application_Error方法中用Response.Redirect指向的页面。
20         protected void Application_Error(object sender, EventArgs e)
21         {
22             Server.ClearError();//在Global.asax中调用Server.ClearError方法相当于是告诉Asp.Net系统抛出的异常已经被处理过了,不需要系统跳转到Asp.Net的错误黄页了。如果想在Global.asax外调用ClearError方法可以使用HttpContext.Current.ApplicationInstance.Server.ClearError()。
23             Response.Redirect("~/ErrorPage.html", true);//调用Server.ClearError方法后再调用Response.Redirect就可以成功跳转到自定义错误页面了
24         }
25 }
时间: 2024-08-05 19:30:04

在Asp.Net的Global.asax中Application_Error跳转到自定义错误页无效的办法的相关文章

ASP.NET MVC中注册Global.asax的Application_Error事件处理全局异常

在ASP.NET MVC中,通过应用程序生命周期中的Application_Error事件可以捕获到网站引发的所有未处理异常.本文作为学习笔记,记录了使用Global.asax文件的Application_Error事件处理和捕获全局异常的详细步骤. 文章演示项目是使用vs2013编译器编写的,下载地址:GlobalExceptionHandle-By-Application_Error.zip. 在VS2013中新建一个MVC项目,这里要先关闭自定义错误,将Web.config配置文件中cus

【转】asp.net 利用Global.asax 捕获整个解决方案中的异常错误

之前做项目的时候都是在每个页面中处理这不同的异常信息,一个页面数下来,很多个try{}catch{}语句块,令整个代码结构有些不够美观. 今天看到一篇帖子,是关于利用全局应用程序类来帮忙获取异常信息,利用 server.Transfer('''')指定接受错误的页面:加上在接受错误页面中利用 server.GetLastError() 获取前一个异常源. Global.asax 中的Application_Error 函数如下: protected void Application_Error(

Global.asax 中校验Session

Application 相关的 Application_Init:在每一个HttpApplication实例初始化的时候执行. Application_Disposed:在每一个HttpApplication实例被销毁之前执行. Application_Error:所有没有处理的错误都会导致这个方法的执行. Application_Start:在程序初始化的时候执行.在Web应用程序的生命周期里就执行一次(自动的重新启动算另外一次生命周期),这里只能放一些公用的信息,比如HttpApplicat

asp.net mvc global.asax文件详解

一.文件概述 global.asax这个文件包含全局应用程序事件的事件处理程序.它响应应用程序级别和会话级别事件的代码. 运行时, Global.asax 将被编译成一个动态生成的 .NET Framework 类,该类是从HttpApplication基类派生的. 因此在global.asax中的代码可以访问HttpApplication类中所有的public或者protected的成员global.asax不被用户直接请求,但global.asax中的代码会被自动执行来响应特定的应用程序事件

如何在Global.asax中判断是否是ajax请求

今天在一个应用场景中需要在Global.asax中判断一个请求是否是ajax请求,而在ASP.NET MVC中已经提供了一个现成的扩展方法IsAjaxRequest: namespace System.Web.Mvc { public static class AjaxRequestExtensions { public static bool IsAjaxRequest(this HttpRequestBase request); } } 但这个扩展方法只是针对HttpRequestBase,

ASP.NET MVC下自定义错误页和展示错误页的几种方式

在网站运行中,错误是不可避免的,错误页的产生也是不可缺少的. 这几天看了博友的很多文章,自己想总结下我从中学到的和实际中配置的. 首先,需要知道产生错误页的来源,一种是我们的.NET平台抛出的,一种是网站所依赖的宿主抛出的,一般来讲我们所依赖的宿主就是IIS了. IIS中的错误页入口: 其中的错误码想必并不陌生 这里是在服务器上找不到所需资源时抛出的错误页,在这里可以设置需要展示的错误页面,只需将预定的错误页面加入服务器中,然后在指定状态码下配置路径即可. 这是请求在IIS中时,还未完全进入到a

.net全局定时定期执行某些操作在Global.asax中具体实现

全局定时定期执行某些操作看起来是多么自动化的一个问题不过在.net的Global.asax文件中稍微配置即可实现,详细配置如下,感兴趣的朋友可以参考下哈 <%@ Application Language="C#" %> <%@ import Namespace="System.Data" %> <%@ import Namespace="System.Data.SqlClient" %> <%@ impo

asp.net MVC自定义错误页,并记录错误日志

只需要在Global.asax文件中添加以下代码,则可以在出错后友好的展示错误页,也不需要在很多地方写记录错误日志的代码 protected void Application_Error(object sender, EventArgs e) { if (HttpContext.Current.IsCustomErrorEnabled) { return; } var exception = Server.GetLastError(); var httpException = new HttpE

ASP.NET MVC Global.asax文件中的事件

1 public class MvcApplication : System.Web.HttpApplication 2 { 3 protected void Application_Start(object sender, EventArgs e) 4 { 5 //不是每次请求都调用 6 //在Web应用程序的生命周期里就执行一次 7 //在应用程序第一次启动和应用程序域创建事被调用 8 //适合处理应用程序范围的初始化代码 9 } 10 11 void Application_End(obj