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