自定义错误处理http模块
Custom error handling http module
我正在尝试拦截网络服务器上所有站点中发生的错误,以便做其他有用的事情,例如日志记录。
作为起点,我有
- 创建了将事件处理程序附加到站点错误事件的 http 模块。
- 使用一组引发异常的操作方法创建了测试 MVC 项目。
- 将创建的 http 模块 class dll 添加到 GAC。
Http模块class库实现为:
我创建了一个 class 库项目,其中只有一个 class 扩展 IHttpModule。请注意,这只是一个简化版本。
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 添加到 GAC:
- 使用 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 站点时,我希望看到一条错误消息:
"Custom exception from MyErrorModule"
相反,我收到此错误:
"Could not load file or assembly 'MisWebModules' or one of its dependencies. The system cannot find the file specified."
好的。我在 web.config 中弄错了版本号。我修复了它并且它有效。
web.config 文件中的综合模块标签应包含以下 GAC 程序集详细信息。
- Dll 信息
- 版本号
- 文化
- public 密钥令牌
可以使用以下命令查看详情。
gacutil /l
我正在尝试拦截网络服务器上所有站点中发生的错误,以便做其他有用的事情,例如日志记录。
作为起点,我有
- 创建了将事件处理程序附加到站点错误事件的 http 模块。
- 使用一组引发异常的操作方法创建了测试 MVC 项目。
- 将创建的 http 模块 class dll 添加到 GAC。
Http模块class库实现为:
我创建了一个 class 库项目,其中只有一个 class 扩展 IHttpModule。请注意,这只是一个简化版本。
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 添加到 GAC:
- 使用 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 站点时,我希望看到一条错误消息: "Custom exception from MyErrorModule"
相反,我收到此错误:
"Could not load file or assembly 'MisWebModules' or one of its dependencies. The system cannot find the file specified."
好的。我在 web.config 中弄错了版本号。我修复了它并且它有效。
web.config 文件中的综合模块标签应包含以下 GAC 程序集详细信息。
- Dll 信息
- 版本号
- 文化
- public 密钥令牌
可以使用以下命令查看详情。
gacutil /l