我们刚安装了一个很棒的ASP.NET MVC项目(从ASP.NET转换而来)。一切都很好,但是我们看到ELMAH发生的大量错误来自于格式错误的机器人/蜘蛛请求。它们不是恶意的 - 只是格格不入。示例是对没有ProductID的产品页面的请求,以及对ProductID不是整数的产品页面的请求。在这些情况下,我有一个操作方法设置,它需要一个整数ProductID,如果ASP.NET MVC看到任何其他内容,则抛出错误。
我真的不想破解我的动作方法来接受字符串或可空的int并编写代码来进行转换并处理缺少的参数。这似乎是很多工作来处理真实用户不会看到的错误。
我知道我可以在ELMAH中过滤掉这些错误,但我想知道是否有一种更优雅的方式来处理它。
答案 0 :(得分:1)
您可以过滤ELMAH中记录的错误。
有关错误过滤的一般文章 - http://code.google.com/p/elmah/wiki/ErrorFiltering
部分样本 - http://code.google.com/p/elmah/wiki/ErrorFilterExamples
你可以把这样的东西放在你的global.asax(或其附近)。
protected void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
if(e.Exception.GetBaseException() is WebFaultException)
{
var exception = ((WebFaultException) e.Exception.GetBaseException());
if(exception.StatusCode == HttpStatusCode.NotModified)
e.Dismiss();
}
}
我认为使用web.config方法可能会更好,明确列出使用已知正则表达式模式获得的URL。那样你过滤就不会苛刻,导致误报。