如何在服务器级别定义错误处理逻辑

时间:2012-03-20 03:50:19

标签: asp.net iis-7 error-handling

对于网站/ vpath,可以处理Application_Error事件以在错误被发送回浏览器之前捕获错误。是否有可能以某种方式在服务器级别执行此操作?也就是说,在根级别定义一个方法,如果网站中发生错误,该方法将执行,但该网站无论出于何种原因都无法处理错误。

我知道您可以在根级别使用web.config为每个HTTP状态代码定义自定义错误消息。但是,这对我的情况并不理想,因为我想根据应用程序逻辑返回不同类型的内容(即HTML或其他内容)。

2 个答案:

答案 0 :(得分:1)

可以在applicationHost.config中注册自定义http模块。然后,目标计算机上的所有IIS应用程序都使用此模块。

1)使用http模块:

创建一个已签名的类库项目
public class ErrorHandlingModule : IHttpModule
{
    public void Dispose() { }

    public void Init(HttpApplication context)
    {
        context.Error += new EventHandler(context_Error);
    }

    void context_Error(object sender, EventArgs e)
    {
        // handle error
    }
}

2)Install将类库导入GAC,因此所有IIS应用程序都可以共享它。

3)Install http模块到applicationHost.config文件。此文件通常位于C:\ Windows \ System32 \ inetsrv \ config中。此文件夹中的文件只能由64位进程访问(32位操作系统上没有此类问题),VS2010无法看到它们,但Explorer可以看到。 applicationHost.config片段可能如下所示:

<location path="" overrideMode="Allow">
    <system.webServer>
        <modules>
            <add name="MyModule" preCondition="managedHandler" type="GlobalErrorHandler.ErrorHandlingModule, GlobalErrorHandler, Version=1.0.0.0, Culture=neutral, PublicKeyToken=bfd166351ed997df" />

答案 1 :(得分:0)

根据我的理解,我不清楚你的问题是什么。在application_error中你可以使用,

Server.GetLastError() to get last error occured in server level.