ASP.NET MVC5 Elmah 错误日志/电子邮件 找不到路径的控制器
本文关键字:找不到 电子邮件 路径 控制器 日志 NET MVC5 Elmah 错误 ASP | 更新日期: 2023-09-27 18:32:49
昨天,我设置了Elmah,每次抛出导致我的网站崩溃的未处理异常时都会给我发送电子邮件。
今天早上,我醒来,看到了 6 封电子邮件,但有例外:
"System.Web.HttpException:找不到路径'/none'的控制器或未实现IController。
它们来自必应爬虫机器人。 还有 2 个来自谷歌和雅虎爬虫机器人。
我已经浏览了我的代码并测试了我网站上的所有链接,没有发现任何错误。我无法尝试路由到"无"控制器。 其他 2 个错误相似,但指向其他几个控制器,但当我测试它们时它们工作正常。
我做错了什么,我怎样才能摆脱这些错误?
我担心他们会在搜索引擎中将我的网站排名较低。
更新:
我终于能够重现错误。在我的浏览器中,我输入:"www.mysite.com/abcde。 我网站的自定义 404 错误页面显示了哪个很好。 然而,Elmah生成了一封电子邮件,说
">找不到路径"/abcde"的控制器或未实现 IController">
当我输入:"www.mysite.com/Home/abcde"时,显示了我的自定义 404 错误页面。 Elmah随后发送了这封电子邮件:
"在控制器'MySite.Controllers.HomeController'上找不到公共操作方法'abcde'。
这让我得出结论,出于某种原因,网络爬虫蜘蛛正在尝试访问我网站上已删除或从未存在的 URL。
如何让 elmah 不记录来自我网站上不存在的 URL 的错误? 我不想每次访问者或网络爬虫尝试输入不存在的 URL 时都收到电子邮件。
另外,有没有办法将最常见的无效网络爬虫网址(如"/none"和"/error_log"(路由到我的主页?
经过更多的研究,我解决了我的问题。
以下是步骤:
-
创建实现
IExceptionFilter
接口的类。 检查代码以查看是否处理了异常。 如果是那么信号艾尔玛。public class ElmahHandledErrorLoggerFilter : IExceptionFilter { public void OnException(ExceptionContext context) { if (context.ExceptionHandled) ErrorSignal.FromCurrentContext().Raise(context.Exception); } }
-
在
FilterConfig
类的GlobalFilterCollection
列表中注册ElmahHandledErrorLoggerFilter
的新实例。 注意:这必须在TransactionFilter
对象之后注册。public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new TransactionFilter()); filters.Add(new ElmahHandledErrorLoggerFilter()); }
-
在 Globals.asax.cs 文件中,添加事件处理程序以筛选出 404 异常。
protected void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e) { FilterError404(e); } protected void ErrorMail_Filtering(object sender, ExceptionFilterEventArgs e) { FilterError404(e); } // Dismiss 404 errors for ELMAH private void FilterError404(ExceptionFilterEventArgs e) { if (e.Exception.GetBaseException() is HttpException) { HttpException ex = (HttpException)e.Exception.GetBaseException(); if (ex.GetHttpCode() == 404) e.Dismiss(); } }
就是这样。 现在不会记录或邮寄 404 错误,但将记录/邮寄所有其他异常。
我会定期使用 Xenu 扫描我的网站以查找断开的链接。
你可以在这里阅读更多,Elmah文档和堆栈溢出。
很可能这意味着在您的页面上的某个地方有指向"none"的链接 - 即您认为仅脚本链接的内容(带有取消默认导航click
处理程序(。修复取决于链接实际应该做什么,但通常最好让所有链接都指向现有位置,即使它通常由脚本处理。
您可以尝试自己抓取您的网站(使用使用 HTMLAgilityPack 编写的基本代码或现有的网站扫描工具(,以检查是否存在未指向正确位置的链接。