我目前正在使用.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数据?
答案 0 :(得分:1)
在System.Web.Management.WebBaseEvent
上使用反编译器。引发事件时,它会直接引用HttpContext.Current
而没有任何包装或帮助程序类。然后调用您的ProcessEvent
方法,而不用将另一个线程或任何静态类调高。因此,从HttpContext.Current
方法访问ProcessEvent
似乎是半安全的。
我看看HttpContext.Current.Request.Form
是否包含您在处理活动时所寻找的值。在尝试提取表单值之前,您可能希望将其包装在一些空检查中以确保上下文实际存在。