我目前正在与提供 ASP.Net Web 应用程序的第三方供应商合作。该 Web 应用程序每天会生成大约 200 个未处理的异常,最终以电子邮件形式出现在我的收件箱中。经调查发现,这些错误中的大多数是由 GoogleBot 网络爬虫对站点编制索引并触发对另一个第三方网络服务的访问而触发的,该服务对请求进行了速率限制。当超过请求限制时,第三方 Web 服务拒绝请求,这会导致 Web 服务器中出现未处理的异常和 HTTP/500 状态代码。异常如下所示:
异常:抛出“System.Web.HttpUnhandledException”类型的异常。,堆栈跟踪:在 System.Web.UI.Page.HandleError(Exception e)
在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
在 System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
在 System.Web.UI.Page.ProcessRequest()
在 System.Web.UI.Page.ProcessRequest(HttpContext 上下文)
在 ASP.views_products_detail_aspx.ProcessRequest(HttpContext 上下文)
在 System.Web.Mvc.ViewPage.RenderView(ViewContext viewContext)
在 System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext 上下文)
在 System.Web.Mvc.ControllerActionInvoker.c__DisplayClass11.b__e()
在 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
在 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 过滤器, ActionResult actionResult)
在 System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
由于我不太理解的原因,网络应用程序开发人员似乎不愿意处理这些错误。他们的方法是限制 GoogleBot 直到错误停止发生(Google 索引非常积极,每天产生大约 5,000 次点击)。虽然我承认限制 GoogleBot 会起作用,但对我来说似乎是一种逃避。我一直认为未处理的异常是错误。网络应用程序不应该处理这些错误吗?允许 HTTP/500 发生是可以接受的吗?那里的 Web 开发人员是怎么想的?
最佳答案
这里真的有几个问题 :如果网站显示异常(否),网站是否应该显示对用户更友好的内容(是),网站是否在无法继续时向 Googlebot 返回 500 错误(可能),您是否应该要求 Googlebot放慢速度(是),如果您每天发送 500 封异常(exception)电子邮件而没有限制或摘要(可能不是)。
更多详情:-
使用 google.com/webmasters,您可以要求 Google 不那么积极地为您的网站编制索引。
您永远不应该向用户显示异常,您应该始终捕获它并显示一个友好的错误页面但是当您显示该页面(例如 404 或 500)时,您需要小心保留 HTTP 代码,因为如果您返回带有代码的页面= 200 那么该错误页面将进入搜索引擎索引。
任何错误处理程序都应限制发生错误时发送电子邮件的频率。
编写良好的错误处理程序还应该允许抑制您知道会发生的错误 - 例如某些搜索引擎坚持请求不存在的页面。
如果 Google 可以让您进入速率限制情况,那么来自用户的高流量可能也可以这样做,因此总体而言,您似乎也需要某种缓存解决方案。
关于asp.net - 在 ASP.NET Web 应用程序中存在未处理的异常是否可以接受?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3293657/