如何在健康监控邮件中包含 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
是否包含您在处理事件时要查找的值。您可能希望将其包装在一些空检查中,以确保在尝试提取表单值之前上下文确实存在。
我目前正在使用 .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
是否包含您在处理事件时要查找的值。您可能希望将其包装在一些空检查中,以确保在尝试提取表单值之前上下文确实存在。