ASP.NET和IIS6:捕获所有应用程序错误

时间:2008-10-21 05:20:03

标签: asp.net iis

我们的群组旧版ASP 3.0网络应用程序能够通过在IIS的自定义错误选项卡中设置自定义错误文件来利用全局错误文件。我无法为ASP.NET应用程序找到类似的解决方案。

有没有人知道是否有办法让一个集中的“Error.aspx”页面(例如)会为整个应用程序池捕获错误?目标是避免向每个应用程序的全局错误处理程序添加自定义代码....

非常感谢任何指导!

5 个答案:

答案 0 :(得分:1)

您可以将<customErrors defaultRedirect="[url]"></customErrors>标记添加到web.config,甚至可以添加到machine.config以重定向到自定义错误页面。自定义错误标记还支持多个可用于定义自定义错误的子元素。

记住编辑machine.config文件时,它会影响该计算机上的所有应用程序。

答案 1 :(得分:1)

签出global.asax.cs文件的Application_Error方法。

您可以使用以下内容获取错误的详细信息:

Exception myError = Server.GetLastError();
Exception baseException = myError.GetBaseException();

答案 2 :(得分:1)

我们使用ELMAH来做你想要的。您可以在机器级别工作,因此您不必在每个网站上设置自定义错误处理:

http://code.google.com/p/elmah/

然后您还可以合并&lt; customErrors&gt;在web.config中标记以确保它们被重定向到错误页面。 ELMAH将负责确保您收到有关所有内容的通知。

答案 3 :(得分:0)

您还可以通过利用Global.asax文件中的Application_OnError事件来捕获错误。然后,你可以像上面所说的Ben R那样做。通过Server.GetLastError()例程捕获错误。

答案 4 :(得分:0)

您还可以构建一个名为“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);
    }
}

它看起来像这样。