Я следил за ответом на этот пост здесь, но я не могу заставить приложение перенаправлять на пользовательскую страницу при обнаружении ошибки 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:
Есть ли что-то, что я делаю неправильно? Есть ли какие-то другие настройки, с которыми я должен справиться? Должен ли мой путь перенаправления указывать на error.cshtml или на его местоположение?
Все было настроено идеально. Единственная проблема заключалась в том, что Я модифицировал Web.Debug.config вместо файла Web.config.. Как только я переместил свои изменения конфигурации в родительский файл Web.config, мои страницы ошибок начали появляться.
Кроме того, это: defaultRedirect = "~/Views/Error/Error"
не работало для меня в качестве перенаправления по умолчанию. Должно быть действие контроллера вместо пути. Почему путь работает для других, мне еще предстоит узнать, так как все это пространство ново для меня.
Надеюсь, это когда-нибудь поможет кому-то.
Взгляните на эта ссылка, иначе есть руководство по MVC 5 здесь.