Поиск классических ошибок ASP на пользовательской странице ошибок 404 в IIS7 - PullRequest
1 голос
/ 12 марта 2012

Мы переносим некоторые классические сайты ASP с блока IIS6 на новый блок Server 2008 с IIS7.

Мы прошли процесс обучения в отношении пользовательских ошибок, и теперь они работают правильно и на сервере.GetLastError теперь работает.

Переносимые нами сайты используют специальную CMS, которая использует пользовательскую страницу ошибок 404.asp для извлечения контента из базы данных в зависимости от URL.Это тоже работает отлично.

Однако, когда 2 объединяются (например, у нас есть ошибка 500 на странице, которая проходит через пользовательскую страницу 404), мы получаем полностью пустую страницу.Нет ошибок, нет информации, ничего.Просто простая белая страница.

Пример 1: http://snavebelac.com/thisdoesnotexist приводит к пользовательской странице 404 Пример 2: http://snavebelac.com/st-test пустая страница.Это имеет намеренную ошибку 500 на пользовательской странице 404.

Я предполагаю, что, поскольку она проходит через пользовательскую страницу ошибки 404.asp, это каким-то образом блокирует работу пользовательской страницы 500 ошибок.

Кто-нибудь знает, как я мог бы настроить сервер так, чтобы пользовательская страница 404 запускалась, но в браузер выводилось 500 ошибок, как в IIS6, ИЛИ есть ли способ настроить сервер для обработки пользовательского 404, а такжена заказ 500?

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 28 ноября 2012

Ознакомьтесь с решением, опубликованным здесь - Как мне правильно обработать 404 в ASP.NET MVC?

Ключ - Response.TrySkipIisCustomErrors = true;

0 голосов
/ 15 ноября 2014

У меня была похожая проблема, решение действительно странное, но работает точно.

Я буду очень прагматичен, сделайте следующее.

<httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL" existingResponse="Auto">
  <remove statusCode="500" subStatusCode="-1" />
  <error statusCode="500" subStatusCode="100" prefixLanguageFilePath="" path="/500.100.asp" responseMode="ExecuteURL" />
  <remove statusCode="404" subStatusCode="-1" />
  <error statusCode="404" prefixLanguageFilePath="" path="/404.asp" responseMode="ExecuteURL" />
</httpErrors>

Пустая страница будет "не пустой", если вы уверены, что она заканчивается:

Response.Flush()

Когда IIS выполняет код внутри /500.100.asp, он не сбрасывает ответ и заканчивается пустой страницей. Уверяю, что в IIS7.5 / IIS8 и Classic ASP возможны пользовательские ошибки «404» и «500.100»;)

0 голосов
/ 15 марта 2012

Вы должны настроить ваш web.config для обработки 500 ошибок состояния, например:

<system.web>
    <customErrors mode="On" defaultRedirect="frmError.aspx">
        <error statusCode="404" redirect="frmNotFound.aspx" />
        <error statusCode="500" redirect="frmError.aspx" />
    </customErrors>
</system.web>

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

...