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

时间:2015-01-05 15:44:35

标签: asp.net-mvc health-monitoring

我目前正在使用.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.
    }
}

网络配置

<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数据?

1 个答案:

答案 0 :(得分:1)

System.Web.Management.WebBaseEvent上使用反编译器。引发事件时,它会直接引用HttpContext.Current而没有任何包装或帮助程序类。然后调用您的ProcessEvent方法,而不用将另一个线程或任何静态类调高。因此,从HttpContext.Current方法访问ProcessEvent似乎是半安全的。

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