Как заставить приложение MVC использовать пользовательскую страницу ошибки

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

Когда я посещаю localhost:12345/error/NotFound, страница с ошибкой отображается нормально. Итак, контроллер для просмотра ссылки все есть.

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

Я пытался добавить <httpErrors existingResponse = "PassThrough" /> к <system.webServer>

Я попытался закомментировать filters.Add(new HandleErrorAttribute()); в FilterConfig.cs.

Я попытался настроить defaultRedirect в моем файле web.config.

У меня ничего не сработало, и я не могу найти никакой хорошей прямой документации по этому вопросу. И кажется, что у людей разные подходы и разные решения, которые работают на них, а не на других. Просто заставляет задуматься...

Вот мой код:

Web.Debug.config:

<configuration xmlns:xdt = "http://schemas.microsoft.com/XML-Document-Transform">
  <system.web>
    <customErrors mode = "On" defaultRedirect = "~/Views/Error/Error">
      <error redirect = "~/Error/NotFound" statusCode = "404" />
    </customErrors>
  </system.web>
</configuration>

Контроллер ошибок:

public class ErrorController : Controller
{
    [AllowAnonymous]
    public PartialViewResult Error()
    {
        return PartialView("Error");
    }

    [AllowAnonymous]
    public PartialViewResult NotFound()
    {
        Response.StatusCode = 404;
        return PartialView("Error");
    }
}

Ошибка.cshtml:

@model System.Web.Mvc.HandleErrorInfo
@{
    ViewBag.Title = "Error";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<div class = "list-header clearfix">
    <span>Error</span>
</div>

<div class = "list-sfs-holder">
    <div class = "alert alert-error">
        An unexpected error has occurred. Please contact the system administrator.
    </div>
    @{
        if (Model != null && HttpContext.Current.IsDebuggingEnabled)
        {
            <div>
                <p>
                    <b>Exception:</b> @Model.Exception.Message<br />
                    <b></b> @Model.ControllerName<br />
                    <b></b> @Model.ActionName
                </p>
                <div style = "overflow: scroll">
                    <pre>
                        @Model.Exception.StackTrace
                    </pre>
                </div>
            </div>
        }
    }
</div>

Расположение Error.cshtml:

Как заставить приложение MVC использовать пользовательскую страницу ошибки

Есть ли что-то, что я делаю неправильно? Есть ли какие-то другие настройки, с которыми я должен справиться? Должен ли мой путь перенаправления указывать на error.cshtml или на его местоположение?

Взгляните на эта ссылка, иначе есть руководство по MVC 5 здесь.

Matt Stannett 29.05.2019 03:24
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
25
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Все было настроено идеально. Единственная проблема заключалась в том, что Я модифицировал Web.Debug.config вместо файла Web.config.. Как только я переместил свои изменения конфигурации в родительский файл Web.config, мои страницы ошибок начали появляться.

Кроме того, это: defaultRedirect = "~/Views/Error/Error" не работало для меня в качестве перенаправления по умолчанию. Должно быть действие контроллера вместо пути. Почему путь работает для других, мне еще предстоит узнать, так как все это пространство ново для меня.

Надеюсь, это когда-нибудь поможет кому-то.

Другие вопросы по теме