【问题标题】:Application_Error getting called numerous timesApplication_Error 被多次调用
【发布时间】:2011-10-18 01:32:53
【问题描述】:

我在 asp.net MVC3 上构建了应用程序。应用程序运行良好,但我在这里看到一个问题,即在每个页面加载时,Application_Error 方法都会多次执行,同时不会引发异常,因此此类应用程序永远不会中断。 在调试时,我可以看到错误消息,但我无法弄清楚为什么会出现此错误。我将不胜感激。

[7/24/2011 10:30:04 PM] 错误:System.Web.HttpException (0x80004005):文件不存在。在 System.Web.StaticFileHandler.GetFileInfo(String virtualPathWithPathInfo, String physicalPath, HttpResponse response) 在 System.Web.StaticFileHandler.ProcessRequestInternal(HttpContext context, String overrideVirtualPath) 在 System.Web.DefaultHttpHandler.BeginProcessRequest(HttpContext context, AsyncCallback 回调, 对象状态) 在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

【问题讨论】:

  • 当我们遇到这个问题时,我的机器上缺少一个必需的 DLL(它来自 Microsoft Enterprise Practices)。尝试使用 ProcMon 找出它找不到的文件。

标签: asp.net asp.net-mvc-3 exception


【解决方案1】:

使用诸如 fiddler 或 firebug(在 Firefox 上)之类的工具来检查从浏览器发出的请求以及哪个得到了 404(未找到文件)——这将是罪魁祸首。

说最可能的原因是对网站图标的请求,即 "/favicon.ico" - 大多数浏览器发出此请求是为了获取通常在地址栏中使用的网站的收藏图标,书签等以轻松识别网站。您的站点/项目下很可能没有此文件,因此它会生成 404(未找到文件)错误。 Web 开发服务器(或某些配置中的 IIS)使用托管管道来处理所有请求,因此每个请求都将通过 global.ajax 进行,包括每个请求的错误。每当您在网站上刷新 (F5) 时,都会收到错误消息。

【讨论】:

  • 我猜你猜对了我的问题。我以前从未使用过提琴手,但我下载了它,它应该可以解决我的问题。解决后将其标记为答案。谢谢。
  • @Vinay fiddler 显示有一些 js 文件/图像被引用但不存在,因此 application_error 被调用。但是有什么方法可以防止 app_error fn 调用此类问题,因为我的错误日志中充斥着此类错误?无论如何,这些错误不会出现在应用程序上,用户也不会受到影响。
  • @Pramodtech,您可以通过查看异常类型 (HttpException) 和 404 状态代码 (HttpException.GetHttpCode()) 来过滤这些错误。但是,重要您应该删除对不需要的 js/图像的引用,因为它们永远不会被获取/缓存,因此浏览器会在每次回发时发出对它们的请求。这在服务器和浏览器端是不必要的负载,由于并发请求更多,会有轻微的延迟。
  • @Vinay 我知道我们不应该引用不存在的文件,我将删除它。我只是好奇这些错误如何不会出现在前端?此外,过滤 404 错误可能不好,因为当用户尝试从应用程序中删除旧页面时可能会发生这种情况。
  • @Pramodtech,如果您将 url 粘贴到地址栏中的此类资源,您将看到错误。错误以 404 形式出现在前端,但由于这些请求是针对文档中的嵌入内容,浏览器可能不会显示它们(只要已收到文档 html)。当然,如果是图像,您可以看到替代文本(或通用未找到图标)。关于过滤 404,这是个坏主意,但这就是你所要求的。除非您可以从请求路径中找出要记录的内容和不记录的内容,否则您无法选择记录 404。我宁愿记录所有内容并从代码中删除错误的引用。
猜你喜欢
  • 2011-10-02
  • 2010-12-02
  • 2020-06-08
  • 2010-10-24
  • 2020-10-19
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
  • 2019-09-19
相关资源
最近更新 更多