自定义错误处理http模块

Custom error handling http module

我正在尝试拦截网络服务器上所有站点中发生的错误,以便做其他有用的事情,例如日志记录。

作为起点,我有

  1. 创建了将事件处理程序附加到站点错误事件的 http 模块。
  2. 使用一组引发异常的操作方法创建了测试 MVC 项目。
  3. 将创建的 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:

  1. 使用 csc.exe,我从“.cs”代码文件中获取“.netmodule”文件
  2. .snk”文件来自项目。
  3. al.exe 需要“.netmodule”和“.snk”来为 .dll 赋予强名称
  4. 有了强名称,.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