Подтвердить что ты не робот

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

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

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

Проверьте ваши файлы 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 на странице, что эта ошибка произошла.

Ответ 4

Добавьте следующий метод в файл 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

Ответ 5

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

Ответ 6

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

Поэтому добавление файла default.aspx решило проблему.

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

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