Я вижу неправильное представление. Вы хотите сделать вещь MVC
и redirect
для действия контроллера.
Но defaultRedirect
сам по себе является соглашением Web Form
и тем самым ограничен. Момент, когда вы перенаправлять на другой контроллер, то вы потеряете ваш HttpContext
, и тем самым потерять свой HandleErrorInfo
объект
Ваш [HandleError]
Атрибут требует View
, чтобы направить его сообщение об ошибке. Следуя приведенному выше примеру, я предполагаю, что у вас есть папка Views/Error
для вашего ErrorController
, и в ней вы видите Index
View. Если вы хотите, чтобы ваш фильтр контекста, чтобы отправить HandleErrorInfo
объект этой точки зрения,
Попробуйте этот синтаксис:
[HandleError(View="~/Views/Error/Index")]
Public class HomeController : Controller
Но что насчет Logging?!?!?
Я подозреваю, что ваши намерения более, чем просто отображение стека ошибок пользователей. На самом деле, я подозреваю, что у вас нет такого намерения. Я подозреваю, что ваша настоящая цель - зарегистрировать вашу ошибку (возможно, до db) и отобразить небольшое сообщение для вашего пользователя.
То, что я объяснил до сих пор, было «, что лучше [способ] показать необработанные исключения на мой взгляд». Для этого подходит атрибут [HandleError]
.
Но если вы хотите, чтобы перейти к следующему шагу (протоколирование ошибки) у вас есть несколько вариантов:
1) Override your base controller's On Exception method; создайте свой собственный Controller
, наследующий класс MVC Controller, но переопределите метод исключения. Этот подход может использоваться в сочетании с атрибутом [HandleError]
2) Create a custom exception handler Создайте свой собственный обработчик исключений, который регистрирует ошибку. Затем ваш обработчик исключений может вызвать вид выбора или может работать совместно с [HandleError(order=2)]
, поскольку атрибуты фильтра могут принимать аргумент порядка, применяя приоритет.
Нитин Sawant спрашивает, что такое мнение об ошибке будет выглядеть следующим образом.
@model System.Web.Mvc.HandleErrorInfo
<h2>Exception details</h2>
<p> Controller: @Model.ControllerName </p>
<p> Action: @Model.ActionName </p>
<p> Exception: @Model.Exception </p>
customError теряет всю ссылку на ошибку. –
Возможный дубликат [Как обрабатывать исключенные исключения в приложении ASP.NET MVC 3?] (Http://stackoverflow.com/questions/6596648/how-do-i-handle-uncaught-exceptions-in-an- asp-net-mvc-3-application) –
В то время как customError перенаправляет, он создает новый HTTP-запрос, чтобы потерять все предыдущие данные ответа. Вам нужно установить redirectMode в ResponseRewrite, чтобы вы не сделали новый запрос. –