Ошибки с пользовательским HandleErrorAttribute не работает - PullRequest
2 голосов
/ 26 июля 2011

Я прочитал много статей и несколько постов (в том числе здесь в stackoverflow), но не знаю, что я делаю неправильно.

Вот мой код:

Global.asax.cs

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
}

ErrorControler.cs

public class ErrorController : Controller
{
    public ActionResult Error404()
    {
        return View();
    }

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

Web.config

<customErrors mode="On" defaultRedirect="~/Error/Error500">
  <error statusCode="404" redirect="~/Error/Error404"/>
</customErrors>

MyController.cs

public ActionResult Index()
{
    using (var db = new DataContext())
    {
        int a = 2, b = 0;
        var r = a / b;
        return View(r);
    }
}

Error500.cshtml

@model System.Web.Mvc.HandleErrorInfo
@{
    ViewBag.Title = "Erro";
}

<h2>@ViewBag.Title</h2>
<div id="error-info">
    <p>Ocorreu um erro inexperado na página <a class="error-url" href="@Response["aspxerrorpath"]" title="Origem do erro">@Response["aspxerrorpath"]</a></p>
    <p>Se o erro persistir, por-favor, entre em contato com os administradores do site.</p>
    <div class="error-details">
        <p>@Model.Exception.Message</p>
    </div>
</div>

Когда я пытаюсь получить доступ к пути /MyController, появляется следующее сообщение:

Ошибка сервера в приложении '/'.

Ресурс не найден.

Описание: HTTP 404. Ресурс, который вы ищете (или один из его зависимости) можно было бы удалить, изменить его имя или Временно недоступен. Пожалуйста, просмотрите следующий URL и сделайте уверен, что оно написано правильно.

Запрошенный URL: / Ошибка / Ошибка500

Я бы хотел, чтобы это произошло, когда на каком-либо контроллере произошла ошибка, если код http не был сообщен в web.config, он перенаправляется в представление по умолчанию Error500

В этой статье, например, , она обрабатывает ошибки DbException, но хотела бы обрабатывать ошибки любого типа.

Ошибки типа 404 (страница не найдена) работает отлично. Пользователь перенаправлен на страницу Error404.cshtml

1 Ответ

8 голосов
/ 26 июля 2011

Если вы хотите, чтобы это произошло, удалите / прокомментируйте следующую строку из вашего Global.asax:

filters.Add(new HandleErrorAttribute());

В основном вам нужно выбрать, хотите ли вы, чтобы ASP.NET обрабатывал ваши ошибки (раздел <customErrors> в вашем web.config) или ASp.NET MVC (глобальный фильтр действий HandleErrorAttribute, который, кстати, требует от вас включить пользовательские ошибки в web.config)

Или извлеките альтернативный метод для обработки ошибок в ASP.NET MVC (при таком подходе вам все равно придется удалить строку, которую я показал, из вашего Global.asax).

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