Как настроить пользовательские страницы ошибок с представлениями Razor и ASP.NET MVC5? - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь реализовать пользовательские страницы ошибок для моего веб-приложения MVC 5 ASP.NET (.NET Framework 4.7).

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

System.Web.HttpException (0x80004005): Контроллер для пути '/ test' не найден или не реализует IController.

При настройке перенаправления (замените redirectMode="ResponseRewrite" на defaultRedirect="~/Error/GenericError"), страницы, которые не могут быть найдены, перенаправят на страницу ошибки. Однако я не хочу перенаправления по логическим / семантическим / SEO причинам (например, не найдена страница ошибки [redirect], а страница, которую открыл пользователь). Но это не для обсуждения.

Как реализовать пользовательские страницы ошибок без перенаправления?


Структура каталогов

  • /
    • Controllers/
      • ErrorController.cs
      • HomeController.cs
    • Views/
      • Error/
        • 404.cshtml
      • Home/
        • Index.cshtml
    • Web.config

/ Web.config (выделено из несвязанного, например, раздела конфигурации log4net)

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
        <customErrors mode="On" redirectMode="ResponseRewrite">
            <error statusCode="404" redirect="~/Error/Error404" />
        </customErrors>
    </system.web>
    <system.webServer>
        <httpErrors errorMode="Custom" existingResponse="Replace">
            <remove statusCode="404" />
            <error statusCode="404" responseMode="ExecuteURL" path="~/Error/Error404" />
        </httpErrors>
    </system.webServer>
</configuration>

/ Контроллеры / ErrorController.cs

using System.Web.Mvc;

namespace WebApplication1.Controllers
{
    [HandleError]
    public class ErrorController : Controller
    {
        public ActionResult Error404()
        {
            return View("404");
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...