如何解决异常“文件不存在”?

时间:2010-09-13 23:05:06

标签: asp.net-mvc application-error

我有一个基本的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)

6 个答案:

答案 0 :(得分:55)

正如您所说,它可能是您的母版页引用的丢失文件或图像。要捕获错误,请将以下错误处理程序添加到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);
    }
}

然后,这应该告诉您页面请求的资源

答案 1 :(得分:5)

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

? HttpContext.Current.Request.Url.ToString()

答案 2 :(得分:2)

检查CSS文件中的url(resource_path),其中“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类声明发生了这个错误。

答案 3 :(得分: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

答案 4 :(得分:0)

在我的情况下,我得到了同样的错误,虽然我没有在浏览器控制台中找到任何“404错误”。我甚至检查了主文件,找不到任何文件丢失。 事实证明,浏览器希望favicon.ico成为网站的根源。 我在我的网站的根目录创建了一个favicon.ico,问题就消失了。 这是一个生成图标的好网站:http://www.favicon.cc/

答案 5 :(得分:0)

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

因此添加default.aspx文件解决了这个问题。

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

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