0
我试图拦截在Web服务器上的所有网站发生的错误,以便做其他有用的东西,如日志记录。自定义错误处理http模块
作为一个起点,我有
其中附加的事件处理程序,以网站的错误事件- 创建HTTP模块。
- 使用一组操作方法创建测试MVC项目抛出异常。
- 将创建的http模块类dll添加到GAC。
我创建了一个类库项目只有一个类扩展的IHttpModule:为
的HTTP模块类库实现。请注意,这只是一个简化版本。
using System;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Web;
namespace MyWebModules
{
[ComVisibleAttribute(true)]
public class MyErrorModule : IHttpModule
{
public void Dispose()
{
throw new NotImplementedException();
}
public void Init(HttpApplication context)
{
context.Error += new EventHandler(OnError);
}
private void OnError(object sender, EventArgs e)
{
throw new Exception("Custom exception from MyErrorModule");
//TODO removed the above exception and add real life code here.
}
}
}
我添加的dll海关总署,按照以下流程:
- 使用CSC.EXE,我得到 “的.cs” “.netmodule” 文件代码文件
- “.snk”文件来自项目。
- al.exe需要“.netmodule”和“.snk”才能为.dll赋予强名称
- 使用强名称,可以将.dll添加到GAC。
使用MVC测试项目进行测试。
测试网站web.config具有以下部分。
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="MyCustomWebModules" />
<add name="MyCustomWebModules" type="MyWebModules.MyErrorModule,MyWebModules" />
</modules>
</system.webServer>
当我访问一个测试MVC网站,我希望看到它说的错误:
“从MyErrorModule自定义异常”相反,我得到这个错误:
“无法加载文件或程序集'MisWebModules'或它的一个依赖项,系统找不到指定的文件。“
首先,您应该在web.config中检查您的http模块定义。它是否正确指定程序集名称和公钥标记?如果是,则启用并检查融合日志。这将给出一个详细的报告,说明程序集加载过程失败的原因。 –
是的,我在web.config中有该部分。和我的开发机器使用IIS7.5,所以模块标签应该没问题。 –
融合时间,然后我猜 –