目前,我正在与第三方供应商合作,后者已提供ASP.Net Web应用程序。该网络应用程序每天会产生大约200个未处理的异常,这些异常最终以电子邮件形式发送到我的收件箱中。经调查发现,大多数此类错误是由GoogleBot网络抓取工具将网站编入索引并触发对另一个第三方Web服务的访问所触发的,这限制了请求的速率。当超出请求限制时,第三方Web服务将拒绝该请求,这将导致Web服务器中出现未处理的异常以及HTTP/500状态代码。异常如下所示:
异常:引发类型为'System.Web.HttpUnhandledException'的异常。堆栈跟踪:位于System.Web.UI.Page.HandleError(Exception e)
在System.Web.UI.Page.ProcessRequestMain处( bool includeStagesBeforeAsyncPoint, bool includeStagesAfterAsyncPoint)
在System.Web.UI.Page.ProcessRequest处( bool includeStagesBeforeAsyncPoint, bool 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过滤器,ResultExecutingContext preContext,Func`1延续)
在System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext,IList`1过滤器,ActionResult actionResult)
在System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext,字符串actionName)
网路应用程式开发人员似乎不愿意处理这些错误,原因是我不太了解。他们的方法是限制GoogleBot,直到错误停止发生为止(Google索引非常激进,每天产生约5,000次匹配)。尽管我接受节制GoogleBot的工作,但对我来说似乎是个解决方案。我一直认为未处理的异常是错误。 Web应用程序不应该处理这些错误吗?允许HTTP/500发生是可以接受的吗? Web开发人员对此有何想法?
最佳答案
这里确实存在几个问题:网站应显示异常(否),网站应显示对用户更友好的内容(是),网站在无法继续运行时应向Googlebot返回500错误(可能是) ),如果您要求Googlebot放慢速度(是),则每天应发送500封异常电子邮件,且不进行任何限制或汇总(可能不会)。
详细信息:-
您可以使用google.com/webmasters要求Google减少对网站的索引。
您永远不要向用户显示异常,您应该始终捕获它并显示友好的错误页面,但是在显示该页面(例如404或500)时,请务必保留HTTP代码,因为如果返回包含代码的页面= 200,则该错误页面将进入搜索引擎索引。
任何错误处理程序都应限制发生错误时发送电子邮件的频率。
编写正确的错误处理程序还应允许抑制您将要发生的错误-例如某些搜索引擎坚持要求提供不存在的页面。
如果Google可以让您进入速率限制的情况,那么来自用户的高流量可能也可以做到这一点,因此总的来说,这听起来像您在这里也需要某种缓存解决方案。
关于asp.net - 在ASP.NET Web应用程序中具有未处理的异常是否可以接受?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3293657/