Не могу получить defaultRedirect для работы - PullRequest
11 голосов
/ 02 июня 2011

В моем 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? Файл определенно находится в Views / Shared.

Ответы [ 5 ]

8 голосов
/ 02 июня 2011

DefaultRedirect не будет напрямую переходить к представлению.Ваш defaultRedirect выглядит как файл вида бритвы, который он не может обработать.Например: откуда берется модель?Он не может быть и не может быть указан в файле конфигурации, поэтому он не может обрабатывать представление.

Если вам нужно больше страниц с динамическими ошибками в MVC, вы можете прочитать custom errorстраницы и обработка ошибок в MVC 3

5 голосов
/ 17 июля 2012

Это работает для меня. Просто внесите это изменение в web.config:

<system.web>
    <customErrors mode="On" defaultRedirect="~/Views/Shared/Error.cshtml">
    </customErrors>
</system.web>
3 голосов
/ 02 июня 2011

Отредактируйте ваш 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());
        }
}
2 голосов
/ 02 июня 2011

Вы должны пометить действие вашего контроллера атрибутом [HandleError] или зарегистрировать его как глобальный фильтр

РЕДАКТИРОВАТЬ: Это происходит из-за того, что функция перенаправления пользовательских ошибок относится к инфраструктуре ASP.NETи ничего не знает о ASP.NET MVC.

Вы должны создать отдельный контроллер для управления перенаправлениями и указать URL-адрес в своем Web.config.Или вы можете создать статический html-файл и поместить его в корневой каталог (или куда-либо еще, кроме каталога Views)

1 голос
/ 02 июня 2011

Одним из решений является создание ErrorController

public class ErrorController : Controller
{
    //
    // GET: /Error/

    public ActionResult Error()
    {
        return View();
    }

    public ActionResult Error404()
    {
        return View("Error");
    }

}

Изменить Web.config

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...