Пользовательская ошибка 404 не перенаправляя должным образом

StackOverflow https://stackoverflow.com/questions/3803383

Вопрос

У меня есть эта пользовательская ошибка перенаправления в моем файле Web.config, но, похоже, не работает с тех пор, как я добавил redirectMode="ResponseRewrite"

Он работает нормально для 500 ошибок, но не для 404 (просто не перенаправляется, когда у меня 404)

Вот код из web.config

<customErrors mode="On" redirectMode="ResponseRewrite"> 
   <error statusCode="404" redirect="/servererror/default.aspx" /> 
   <error statusCode="500" redirect="/servererror/default.aspx" /> 
</customErrors>

И вот мой мой servererror/default.aspx код

Dim err As System.Exception = Server.GetLastError()

Dim Errormail = New MailMessage

     'Send email to Bondholder using email address from form
     Errormail.To           = "email@email.co.uk"

     Errormail.From         = "servererror@email.co.uk"
     Errormail.Subject      = "Server Error Alert"
     Errormail.BodyFormat   = MailFormat.Text
     Errormail.Priority     = MailPriority.Normal
     Errormail.Body         = ("Error on page - " & err.InnerException.Message & vbcrlf & vbcrlf & "URL of the page - " & Request.Url.ToString())

     SmtpMail.SmtpServer    = "localhost"

     SmtpMail.Send(Errormail)

Мне нужно держать redirectMode="ResponseRewrite" таким образом servererror/default.aspx отправляет мне электронное письмо, когда есть ошибка

Любая помощь приветствуется

Спасибо

Джейми

ОБНОВИТЬ

Я посмотрел в Интернете и обнаружил, что несколько других людей, имеющих те же проблемы, но я не могу найти окончательный ответ.

Есть идеи

Спасибо

Джейми

Это было полезно?

Решение

Я предполагаю, что вы видите общий .NET, когда страница не найдена?

Решение согласно ниже. Обратите внимание на добавление ~ для пути:

    <customErrors mode="On" redirectMode="ResponseRewrite">
        <error statusCode="404" redirect="~/servererror/default.aspx"/>
        <error statusCode="500" redirect="~/servererror/default.aspx"/>
    </customErrors>

ОБНОВИТЬ:

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

Если ваш сайт доступен через Интернет, полезно отобразить разные сообщения об ошибках реальным пользователям, то есть, если страница, которую они ищет, исчезнул (404) или есть некоторые временные проблемы (500), и это может быть хорошая идея проверить Вернуться позднее. Текст по ошибке Каждая страница должна отражать это соответственно. Также важно сообщать о поисковых системах соответствующих кодов статуса, чтобы указать, больше не доступна страница, т.е. она была удалена из вашего проекта и должна быть сброшена из индекса поисковой системы или если есть ошибка, а поисковая система должна Вернитесь, чтобы ползать страницу позже и не падать из индекса. Не сообщая об этих кодах состояния правильно, может ухудшить производительность вашего веб-приложения через поисковые системы. Обычно мой web.config читается как ниже:

<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/GenericError.aspx">
    <error statusCode="404" redirect="~/NotFound.aspx"/>
</customErrors>

Примечание. Важно установить атрибут «DEFAULTREDIRECT» из-за недавно обнаруженного отверстия безопасности в рамках .NET Framework (Ask Google). Установка Это обходной путь для подключения отверстия.

Чтобы сообщить надлежащие коды состояния HTTP обратно к клиенту (и поисковую систему BOT), вы можете использовать код ниже. Просто поместите их в страницу Загрузить событие соответствующей страницы:

Для 500 ошибок:

Response.Status = "500 Internal Server Error"

Для 404 ошибок:

Response.Status = "404 Not Found"

Теперь вы можете удалить код из GLOBAL.ASAX и создать общую функцию для вашей ошибки электронной почты, которую можно вызвать с каждой страницы. Если вы предпочитаете, вы можете объединить вышеуказанный код в свою существующую страницу ошибки, однако я всегда предпочитаю разделить их, как я нахожу это Neater.

Если вы хотите проверить коды состояния HTTP ваших страниц, я рекомендую взглянуть на бесплатное приложение под названием Соревнование

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top