Пользовательская ошибка 404 не перенаправляет должным образом
У меня есть это пользовательское перенаправление ошибок в моем файле 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
отправляет мне электронное письмо при появлении ошибки
Любая помощь приветствуется
Спасибо
Джейми
ОБНОВИТЬ
Я осмотрел сеть и обнаружил, что у многих других людей есть такие же проблемы, но я не могу найти однозначного ответа.
Есть идеи
Спасибо
Джейми
1 ответ
Я предполагаю, что вы видите общий.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 (спросите Google). Установка это обходной путь, чтобы закрыть отверстие.
Чтобы сообщить клиенту (и поисковому роботу) надлежащие коды состояния HTTP, вы можете использовать приведенный ниже код. Просто поместите их в событие загрузки страницы соответствующей страницы:
На 500 ошибок:
Response.Status = "500 Internal Server Error"
Для 404 ошибок:
Response.Status = "404 Not Found"
Теперь вы можете удалить код из Global.asax и создать общую функцию для вашей логики сообщения об ошибке, которую можно вызывать с каждой страницы. Если вы предпочитаете, вы можете объединить приведенный выше код с существующей страницей ошибок, однако я всегда предпочитаю разделять их, как мне кажется, более аккуратными.
Если вы хотите проверить коды состояния HTTP своих страниц, я рекомендую взглянуть на бесплатное приложение под названием Fiddler.