我目前正在为面向公众的网站实施健康监控。我正在使用SimpleMailWebEventProvider在发生错误时发送电子邮件。 “所有错误”。
我希望有这方面经验的人能够向我展示一种简单的方法来防止在发送电子邮件时发送电子邮件 “从客户端检测到一个潜在危险的Request.Path值(:)”我可以看到这些错误并且可以告诉他们来自机器人而不是人类,他们的时间(一次性全部)和请求的URL
Request path: /Scripts/,data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g
我喜欢.Net在这些案件中引发错误的事实,但这些电子邮件占我收到的所有健康监控电子邮件的90%。阅读所有这些内容以查找指示网站代码问题的错误电子邮件是一件麻烦事。
我想避免创建我自己的MailEventProvider,虽然我过去但我相信我最终不得不使用ILSpy来创建我自己的,因为SimpleMailWebEventProvider是Sealed。
答案 0 :(得分:9)
为了过滤机器人引起的异常,我通常在Global.asax的Application_Error处理程序中调用Server.ClearError(),这可以防止运行状况监视处理未处理的异常。但是,如果对事件日志使用运行状况监视,则还可以防止错误出现在事件日志中。
void Application_Error(object sender, EventArgs e)
{
var exception = Server.GetLastError();
if (exception is HttpException && exception.Message.Contains("A potentially dangerous Request.Path value was detected from the client"))
{
Server.ClearError();
}
}
在真实的应用程序中,我认为使用一些额外的条件来确保错误来自机器人是有意义的,例如考虑IP地址,网址等。