为什么我的 Elmah 配置没有被应用?

问题描述 投票:0回答:0

我继承了一个使用 ASP.NET MVC 编写的遗留内部站点。它使用 Elmah 来邮寄未捕获的异常。不幸的是,这些电子邮件包含敏感信息,例如密码。按照本指南,我实现了这个

ErrorLogModule
类以从错误报告中删除敏感字段:

using Elmah;
using System.Linq;
using ElmahErrorLogModule = Elmah.ErrorLogModule;

namespace HRCommittee
{
    // method taken and modified from https://stackoverflow.com/a/24914392/713735
    public class ErrorLogModule : ElmahErrorLogModule
    {
        protected override void OnErrorSignaled(object sender, ErrorSignalEventArgs args)
        {
            string[] serverVariables = args.Context.Request.ServerVariables.AllKeys;
            string[] varsToRemove = { "AUTH_PASSWORD", "HTTP_COOKIE", "ALL_HTTP", "ALL_RAW" };

            if (serverVariables != null)
            {
                foreach (string var in varsToRemove)
                {
                    if (serverVariables.Contains(var))
                    {
                        args.Context.Request.ServerVariables.Remove(var);
                    }
                }
            }

            base.OnErrorSignaled(sender, args);
        }
    }
}

但是,电子邮件没有改变。此外,在实现上述代码后,我看到其他人在另一个位置放置了与我链接的指南相同的文件,但也没有成功。由于 Elmah 几乎没有文档记录,而且我对 Microsoft 堆栈还很陌生,因此我一直在努力找出问题所在。

顺便说一下,

web.config
中的相关条目讲述了一些已经尝试过的故事:

<system.webServer>
    <modules>
      <remove name="FormsAuthentication" />
      <!--<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />-->
      <!--<add name="ErrorLog" type="HRCommittee.App_Start.ErrorLogModule" preCondition="managedHandler" />-->
      <add name="ErrorLog" type="HRCommittee.ErrorLogModule" preCondition="managedHandler" />
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
    </modules>
    <!-- other stuff -->
</system.webServer>

我错过了什么?

c# asp.net-mvc elmah elmah.mvc
© www.soinside.com 2019 - 2024. All rights reserved.