【发布时间】:2008-10-21 05:20:03
【问题描述】:
我们小组的旧版 ASP 3.0 Web 应用程序能够通过在 IIS 的“自定义错误”选项卡中设置自定义错误文件来利用全局错误文件。我无法为 ASP.NET 应用程序找到类似的解决方案。
有谁知道是否有一种方法可以让一个集中的“Error.aspx”页面(例如)捕获整个应用程序池的错误?目的是避免向每个应用的全局错误处理程序添加自定义代码 ....
非常感谢任何指导!
【问题讨论】:
我们小组的旧版 ASP 3.0 Web 应用程序能够通过在 IIS 的“自定义错误”选项卡中设置自定义错误文件来利用全局错误文件。我无法为 ASP.NET 应用程序找到类似的解决方案。
有谁知道是否有一种方法可以让一个集中的“Error.aspx”页面(例如)捕获整个应用程序池的错误?目的是避免向每个应用的全局错误处理程序添加自定义代码 ....
非常感谢任何指导!
【问题讨论】:
您可以将<customErrors defaultRedirect="[url]"></customErrors> 标签添加到您的 web.config 甚至您的 machine.config 以重定向到自定义错误页面。自定义错误标签还支持多个可用于定义自定义错误的子元素。
请记住在编辑 machine.config 文件时,它会影响该机器上的所有应用程序。
【讨论】:
检查 global.asax.cs 文件的 Application_Error 方法。
您可以通过以下方式在此处获取错误的详细信息:
Exception myError = Server.GetLastError();
Exception baseException = myError.GetBaseException();
【讨论】:
我们使用 ELMAH 来满足您的要求。您可以让它在机器级别工作,这样您就不必在每个网站上设置自定义错误处理:
http://code.google.com/p/elmah/
您还可以在 web.config 中加入
【讨论】:
您还可以利用 Global.asax 文件中的 Application_OnError 事件来捕获错误。然后,您可以按照上述 Ben R 进行操作。通过 Server.GetLastError() 例程捕获错误。
【讨论】:
您还可以构建一个名为“ErrorHandlingModule”的自定义模块,该模块将进入 HttpModule。
public class ErrorHandlingModule : IHttpModule
{
public void Init(HttpApplication application)
{
application.Error += new System.EventHandler(OnError);
}
public void OnError(object obj, EventArgs args)
{
Exception ex = HttpContext.Current.Server.GetLastError();
//Log your error here or pick a funny message to display
HttpContext.Current.Server.ClearError();
HttpContext.Current.Response.Redirect("/Error.aspx", false);
}
}
它看起来像这样。
【讨论】: