对于网站/ vpath,可以处理Application_Error事件以在错误被发送回浏览器之前捕获错误。是否有可能以某种方式在服务器级别执行此操作?也就是说,在根级别定义一个方法,如果网站中发生错误,该方法将执行,但该网站无论出于何种原因都无法处理错误。
我知道您可以在根级别使用web.config为每个HTTP状态代码定义自定义错误消息。但是,这对我的情况并不理想,因为我想根据应用程序逻辑返回不同类型的内容(即HTML或其他内容)。
答案 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.