gpt4 book ai didi

asp.net - 全局 ASAX 错误 : File Does Not Exist

转载 作者:行者123 更新时间:2023-12-02 11:04:49 26 4
gpt4 key购买 nike

我试图了解发生了什么错误导致我进入 Global ASAX OnError 处理程序。

using System;
using System.Web;

namespace GLSS.Components.HttpModules
{
public class ExceptionModule : System.Web.IHttpModule
{
private void OnError(object sender, EventArgs e)
{
HttpContext context = HttpContext.Current;

//get the last error
Exception ex = context.Server.GetLastError();
if(ex.InnerException.GetType().ToString() == "CSLA.DataPortalException")
ex = ex.InnerException;

这是我的异常转换为字符串

HttpContext.Current.Server.GetLastError().Message
"File does not exist."
HttpContext.Current.Server.GetLastError().StackTrace
" at System.Web.StaticFileHandler.GetFileInfo(String virtualPathWithPathInfo, String physicalPath, HttpResponse response)
at System.Web.StaticFileHandler.ProcessRequestInternal(HttpContext context)
at System.Web.DefaultHttpHandler.BeginProcessRequest(HttpContext context, AsyncCallback callback, Object state)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)"

如何确定哪一行代码导致了此错误?我尝试将调试选项设置为在错误发生时中断,但事实并非如此,我仍然处于 ONERROR 全局处理程序中。

有一件事是,我看到代码假设将出现内部异常,并且这似乎是 NULL,并在处理程序中导致第二个错误。

我假设错误发生在编译代码中的某个地方。我检查了 Web.Config,唯一提到的路径是日志路径,这似乎有效并且日志记录似乎正在工作。

更新我在这里找到了一些附加信息:

How to solve exception "File does not exist"?

当我在“立即”窗口中检查此项时:

? HttpContext.Current.Request.Url.ToString()
"http://localhost:2322/favicon.ico"

但是,令我困惑的是,我使用“在文件中查找”搜索整个解决方案以查找 favicon.ico,但没有看到任何引用。

当我没有看到图标文件的引用时,为什么会出现找不到图标文件的错误?我猜有些程序集正在使用它?但为什么它要在网络根目录中寻找它呢?

最佳答案

大多数现代浏览器都会盲目地发出对 favicon.ico 的请求,如果没有 favicon(这是正确的行为),他们会期待 404(文件未找到)。您可以在下面找到有关 Link type "icon" 的 HTML5 工作草案的引用。:

In the absence of a link with the icon keyword, for documents obtained over HTTP or HTTPS, user agents may instead attempt to fetch and use an icon with the absolute URL obtained by resolving the URL /favicon.ico against the document’s address, as if the page had declared that icon using the icon keyword.

您看到异常的原因是配置为使用托管/集成管道模式的 Web 开发服务器或 IIS 将所有请求通过Global.asax(包括错误) )。

您可以尝试通过创建以下指向网站图标的虚拟链接来阻止浏览器发出请求:

<html>
<head>
<link rel="shortcut icon" href="#" />
...
</head>
...
</html>

您还可以尝试以下其中一项:

  • RegisterRoutes 方法的开头添加以下行:

    routes.IgnoreRoute("favicon.ico");

    或更扩展的版本:

    routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"});

  • 为网站图标创建一个空文件
  • 通过检查 HttpException.GetHttpCode() 是否有 404((System.Web.HttpApplication)Sender).Context.Request.Url 来过滤错误/favicon.ico

关于asp.net - 全局 ASAX 错误 : File Does Not Exist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14570211/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com