如何在健康监控邮件中包含 POST 数据?

How to include POST data in health monitoring email?

我目前正在使用 .NET 健康监控类在服务器发生错误时向我发送电子邮件。但是,我没有获得有关 POST 数据的任何信息,也无法找到任何方法从引发的事件中获取 POST 数据。

C#

public class EmailWebEvents : WebEventProvider {

    public override void ProcessEvent(WebBaseEvent raisedEvent) {
        BasicEmail email = new BasicEmail();
        email.To = "your-email@email.com";
        email.Subject = "Website Error (" + Environment.MachineName + ")";
        email.Body = raisedEvent.Message + "\n\n" +
                     raisedEvent.EventSource.ToString() + "\n\n" +
                     raisedEvent.ToString();
        email.Send();
    }

    public override void Shutdown() {
        // Nothing needed to be done.
    }

    public override void Flush() {
        // Nothing needed to be done.
    }
}

Web 配置

<system.web>
    <healthMonitoring enabled="true" heartbeatInterval="0">
        <providers>
            <clear />
            <add name="Custom Email Event Provider" type="MvcRoot.Helpers.EmailWebEvents" />
        </providers>
        <rules>
            <clear />
            <add name="appDevEvents" eventName="All Errors" provider="Custom Email Event Provider" profile="Critical" minInstances="1" maxLimit="Infinite" minInterval="00:01:00" custom="" />
        </rules>
    </healthMonitoring>
</system.web>

如何在这些电子邮件中包含 POST 数据?

System.Web.Management.WebBaseEvent 上使用反编译器。引发事件时,它会直接引用 HttpContext.Current,而无需任何包装或助手 类。然后继续调用您的 ProcessEvent 方法,而无需假脱机处理另一个线程或任何静态 类。因此,从您的 ProcessEvent 方法访问 HttpContext.Current 似乎是半安全的。

我会看看 HttpContext.Current.Request.Form 是否包含您在处理事件时要查找的值。您可能希望将其包装在一些空检查中,以确保在尝试提取表单值之前上下文确实存在。