Не удается заставить defaultRedirect работать
В моем web.config у меня есть:
<system.web>
<customErrors mode="On" defaultRedirect="Error.cshtml" />
</system.web>
В Views/Shared/Error.cshtml у меня есть:
@model System.Web.Mvc.HandleErrorInfo
@{
ViewBag.Title = "Error";
}
<h2>
Sorry, an error occurred while processing your request.
</h2>
Если я помещаю неверный URL/маршрут в свой браузер, я получаю следующее:
Ошибка сервера в приложении "/".
Ресурс не найден.
Описание: HTTP 404. Ресурс, который вы ищете (или его зависимости), мог быть удален, изменилось его имя или временно недоступно. Просмотрите следующий URL-адрес и убедитесь, что оно написано правильно.
Запрошенный URL:/Error.cshtml
Почему невозможно найти Error.cshtml? Файл определенно находится в представлениях/общих.
Ответы
Ответ 1
DefaultRedirect не переходит непосредственно к представлению. Ваш defaultRedirect выглядит как файл просмотра бритвы, который он не может обработать. Например: откуда она взяла модель? Он не может быть указан и не может быть указан в файле конфигурации, поэтому он не может обрабатывать представление.
Если вы хотите больше страниц с динамической ошибкой в MVC, вы можете читать настраиваемые страницы ошибок и обработку ошибок в MVC 3
Ответ 2
Это работает для меня. Просто внесите это изменение в web.config:
<system.web>
<customErrors mode="On" defaultRedirect="~/Views/Shared/Error.cshtml">
</customErrors>
</system.web>
Ответ 3
Отредактируйте файл web.config как:
<system.web>
<customErrors mode="On" defaultRedirect="/Home/Error" />
</system.web>
Если вы используете asp.net mvc 1.0 или 2.0, вы должны добавить атрибут HandleError для каждого контроллера:
[HandleError]
public class HomeController: Controller
{
public ActionResult Error()
{
return View();
}
}
если вы используете asp.net mvc 3.0:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalFilters.Filters.Add(new HandleErrorAttribute());
}
}
Ответ 4
Вы должны отметить действие вашего контроллера атрибутом [HandleError]
или зарегистрировать его как глобальный фильтр
EDIT:
Это происходит из-за того, что функция перенаправления пользовательских ошибок принадлежит инфраструктуре ASP.NET и ничего не знает о ASP.NET MVC.
Вы должны создать отдельный контроллер для управления переадресацией и указать URL-адрес в своем Web.config. Или вы можете создать статический html файл и поместить его в корневой каталог (или где бы то ни было, кроме каталога Views)
Ответ 5
Одним из решений является создание ErrorController
public class ErrorController : Controller
{
//
// GET: /Error/
public ActionResult Error()
{
return View();
}
public ActionResult Error404()
{
return View("Error");
}
}
Измените Web.config