17

我有一个基本的 ASP.NET MVC2 站点,每次加载视图(不是部分视图)时都会记录一个“文件不存在”错误。我很确定这是因为我从母版页引用了一个不存在的文件,但我无法确定它是哪个文件。

堆栈跟踪没有用(见下文)。有没有人有关于如何最好地调试这个的任何提示?

File does not exist. :    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)
4

6 回答 6

56

正如您所说,它可能是您的母版页引用的丢失文件或图像。要捕获错误,请将以下错误处理程序添加到您的Global.asax

protected void Application_Error(object sender, EventArgs e)
{
    Exception ex = Server.GetLastError();

    if (ex.Message == "File does not exist.")
    {
        throw new Exception(string.Format("{0} {1}", ex.Message, HttpContext.Current.Request.Url.ToString()), ex);
    }
}

这应该会告诉您页面正在请求什么资源

于 2010-09-14T20:41:03.413 回答
5

或者,如果调试,您可以将以下行放在立即窗口中进行检查:

?

于 2012-01-05T19:06:39.910 回答
2

检查您的 CSS 文件中不存在“resource_path”的 url(resource_path)。

我得到了同样的例外。发现问题出在 CSS 文件中,其中项目中缺少图像文件,而不是文件系统中。例如像这样的一行:

background-image: url( /images/foo.png );

其中“foo.png”文件不在图像文件夹中。

您可以将最后一个异常转换为 HttpException 以获取 HTML 状态代码:

HttpException httpEx = Server.GetLastError() as HttpException;
if( httpEx != null )
    httpEx.GetHttpCode();         // Will be HTML status code, 404 in this case. 

但它不包含任何文件丢失的信息。通过检查页面上的每个 CSS 类声明,我发现了丢失的文件是否发生了此错误。

于 2012-02-01T23:19:16.327 回答
1

Global.asax在文件中添加以下方法

protected void Application_Error(object sender, EventArgs e)
{
    Exception ex = Server.GetLastError();
    Log.Error("An error occurred", ex);
    Log.Error("Requested url: ", Request.RawUrl);
}

Request.RawUrl给出给出错误的确切网址。

现在在您的日志文件中,您应该看到:

Requested url: /favicon.ico
于 2014-04-17T06:11:22.253 回答
0

在我的情况下,这是一个缺失的默认主页,即 default.aspx 是罪魁祸首。

所以添加 default.aspx 文件解决了这个问题。

但是,该项目不需要默认页面,因为它不是面向用户的项目。

它更像是一个通过网络连接遗留系统的中间件应用程序。

于 2014-10-02T14:45:32.557 回答
0

就我而言,我遇到了同样的错误,尽管我在浏览器控制台中没有发现任何“404 错误”。我什至检查了主文件,找不到任何文件丢失。事实证明,浏览器希望 favicon.ico 位于站点的根目录。我在网站的根目录创建了一个 favicon.ico,问题就消失了。这是一个生成图标的好网站:http: //www.favicon.cc/

于 2013-06-09T09:47:42.803 回答