Как заставить приложение MVC использовать пользовательскую страницу ошибок - PullRequest
0 голосов
/ 29 мая 2019

Я следовал за ответом на этом посте здесь , но я не могу заставить приложение перенаправить на пользовательскую страницу при обнаружении ошибки 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");
    }
}

Error.cshtml:

<code>@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
                    
}}

Местоположение Error.cshtml:

enter image description here

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

1 Ответ

0 голосов
/ 06 июня 2019

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

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

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

...