Я пытаюсь создать настраиваемую страницу ошибки HTTP 404, когда кто-то вводит URL-адрес, который не вызывает допустимое действие или контроллер в ASP.NET MVC, вместо того, чтобы отображать общую ошибку ASP.NET «Ресурс не найден».
Я не хочу использовать web.config для этого.
Могу ли я использовать какую-либо магию маршрутизации, чтобы отловить недействительные URL-адреса?
Обновление: я попробовал дать ответ, но по-прежнему получаю уродливое сообщение «Ресурс не найден».
Еще одно обновление: хорошо, видимо что-то изменилось в RC1. Я даже пробовал специально перехватить 404, HttpException
и он все равно выдает мне страницу «Ресурс не найден».
Я даже использовал функцию ресурса MvcContrib и ничего - та же проблема. Любые идеи?
Ответы:
Просто добавьте маршрут catch all в конец таблицы маршрутов и отобразите с ним любую страницу.
См.: Как я могу сделать перехват всех маршрутов для обработки запросов «404 страница не найдена» для ASP.NET MVC?
источник
Я пытался включить настраиваемые ошибки на производственном сервере в течение 3 часов, кажется, я нашел окончательное решение, как это сделать в ASP.NET MVC без каких-либо маршрутов.
Чтобы включить настраиваемые ошибки в приложении ASP.NET MVC, нам потребуется (IIS 7+):
Настройте пользовательские страницы в веб-конфигурации в
system.web
разделе:RemoteOnly
означает, что в локальной сети вы увидите реальные ошибки (очень полезно при разработке). Мы также можем переписать страницу ошибки для любого кода ошибки.Установите параметр волшебного ответа и код состояния ответа (в модуле обработки ошибок или в атрибуте дескриптора ошибки)
Установите еще один волшебный параметр в веб-конфигурации в
system.webServer
разделе:Это было последнее, что я нашел, и после этого я могу видеть пользовательские ошибки на рабочем сервере.
источник
customErrors
результатов в перенаправлении 302 только для загрузки страницы с ошибкой.Я заставил свою обработку ошибок работать, создав ErrorController, который возвращает представления в этой статье. Мне также пришлось добавить «Catch All» к маршруту в global.asax.
Я не вижу, как он попадет на любую из этих страниц с ошибками, если его нет в Web.config ..? Мой Web.config должен был указать:
а затем я также добавил:
источник
Источник
NotFoundMVC - предоставляет удобную для пользователя страницу 404 всякий раз, когда контроллер, действие или маршрут не найдены в вашем приложении ASP.NET MVC3. Вместо страницы ошибок ASP.NET по умолчанию отображается представление NotFound.
Вы можете добавить этот плагин через nuget, используя: Install-Package NotFoundMvc
NotFoundMvc автоматически устанавливается при запуске веб-приложения. Он обрабатывает все различные способы, которыми ASP.NET MVC обычно генерирует исключение 404 HttpException. Это включает в себя отсутствующий контроллер, действие и маршрут.
Пошаговое руководство по установке:
1 - Щелкните правой кнопкой мыши свой проект и выберите "Управление пакетами Nuget" ...
2 - Найдите
NotFoundMvc
и установите.3 - После завершения установки в ваш проект будут добавлены два файла. Как показано на скриншотах ниже.
4 - Откройте только что добавленный NotFound.cshtml в папке Views / Shared и измените его по своему желанию. Теперь запустите приложение и введите неправильный URL-адрес, и вы увидите удобную для пользователя страницу 404.
Нет, пользователи получат сообщение об ошибке, например
Server Error in '/' Application. The resource cannot be found.
Надеюсь это поможет :)
PS: Спасибо Эндрю Дэйви за создание такого классного плагина.
источник
Попробуйте это в web.config, чтобы заменить страницы ошибок IIS. Я думаю, это лучшее решение, и оно также отправляет правильный код состояния.
Дополнительная информация от Tipila - Использование настраиваемых страниц ошибок ASP.NET MVC
источник
Это решение не требует изменений файла web.config или универсальных маршрутов.
Сначала создайте такой контроллер;
Затем создайте представление в «Views / Error / Index.cshtml» как;
Затем добавьте следующее в файл Global asax, как показано ниже:
Если после этого вы все еще получаете настраиваемую страницу ошибок IIS, убедитесь, что следующие разделы закомментированы (или пусты) в файле веб-конфигурации:
источник
Response.End();
в конец обработчика Application_Error. Без этого для данного сеанса запускается только первое возникновение ошибки, что является проблемой, когда у вас есть, например, настраиваемая регистрация ошибок в обработчике Application_Error.Если вы работаете в MVC 4, вы можете посмотреть это решение, у меня оно сработало.
Добавьте в мой следующий метод Application_Error
Global.asax
:Сам контроллер действительно прост:
Проверьте полный исходный код Mvc4CustomErrorPage на GitHub .
источник
У меня была та же проблема, что вам нужно сделать, это вместо добавления атрибута customErrors в файл web.config в папке Views вы должны добавить его в файл web.config в корневой папке ваших проектов.
источник
Вот верный ответ, который позволяет полностью настроить страницу ошибки в одном месте. Не нужно изменять web.config или создавать отдельный код.
Также работает в MVC 5.
Добавьте этот код в контроллер:
На основе http://www.eidias.com/blog/2014/7/2/mvc-custom-error-pages
источник
Я расскажу о некоторых конкретных случаях,
если вы используете метод PageNotFound в HomeController, как показано ниже
это не сработает. Но вы должны очистить теги маршрута, как показано ниже,
И если вы измените его как имя метода в web.config, он будет работать. Однако не забудьте сделать код, как показано ниже, в web.config
источник