Как решить исключение "Файл не существует"?

У меня есть базовый сайт 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 ответов

Решение

Как вы говорите, вероятно, отсутствует файл или изображение, на которое ссылается ваша главная страница. Чтобы зафиксировать ошибку, добавьте следующий обработчик ошибок в свой 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);
    }
}

Затем следует указать, какой ресурс запрашивает страница

Или при отладке вы можете просто поставить следующую строку в Immediate Window, чтобы проверить:

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

Проверьте ваши 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 на странице, где происходила эта ошибка.

Добавьте следующий метод в 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 Дайте точный URL, который выдает ошибку.

Теперь в вашем лог-файле вы должны увидеть:

Requested url: /favicon.ico

В моем случае это была отсутствующая домашняя страница по умолчанию, то есть default.aspx, которая была виновником.

Таким образом, добавление файла default.aspx решило проблему.

Однако для этого проекта не требуется страница по умолчанию, так как это не проект, ориентированный на пользователя.

Это было скорее промежуточное приложение для взаимодействия с устаревшими системами через Интернет.

В моем случае я получал ту же ошибку, хотя я не нашел никаких "404 ошибок" в консоли браузера. Я даже проверил мастер-файл и не смог найти ни одного пропавшего файла. Оказалось, что браузер ожидает, что favicon.ico окажется в корне сайта. Я создал favicon.ico в корне моего сайта, и проблема исчезла. Это был хороший сайт для создания иконки: http://www.favicon.cc/

Другие вопросы по тегам