У моего приложения MVC 3 в .NET 4.0 есть ErrorController
с действием, которое начинается следующим образом:
public ActionResult Index(Exception error, int? functionId, string viewMessage)
{
if (error == null && string.IsNullOrEmpty(viewMessage))
return RedirectPermanent(_DefaultErrorHtm);
// ...
}
Я не настраиваю никакие пользовательские маршруты для этого действия, но когда я запрашиваю "http://localhost/error", параметр error
не null
, но всегда System.Exception
без трассировки стека. Что обеспечивает это значение по умолчанию, MVC 3 или .NET 4.0? Как я могу предотвратить это?
Предполагаемое использованиедля этого действия, что мой пользовательский обработчик ошибок заменяет словарь маршрутов, устанавливает контроллер на «Ошибка» и действие на «Индекс» и предоставляет правильные параметры, и вызывает ErrorController.Execute
. Есть ли лучший способ запретить пользователюзапросить этот маршрут напрямую? ChildActionOnlyAttribute
не работает, потому что замена словаря маршрутов и повторное выполнение элемента управления делает это родительским действием.
ОБНОВЛЕНИЕ: Я боролся с этим, создавая пользовательскийМаршрут, который предоставляет исключение по умолчанию, для которого тестирует мое приложение, а не тестирование на ноль. Это заставляет меня подозревать, что именно MVC 3 поставил System.Exception
для начала.