Пользовательская страница ошибки не отображается при возникновении исключения
Я настроил пользовательский обработчик ошибок, чтобы показать диагностическую информацию пользователю, если происходит сбой. Проблема в том, что пользовательская страница ошибки не отображается, и я получаю исключение (согласно веб-странице) при попытке показать страницу ошибки. Я не могу понять, что вызывает это все же? У меня есть похожие страницы для 500 и 404 ошибок, которые работают нормально.
На странице об ошибке написано Server Error in '/' Application.
Описание: исключение произошло при обработке вашего запроса. Кроме того, произошло другое исключение при выполнении пользовательской страницы ошибок для первого исключения. Запрос был прекращен.
Я покажу фрагменты моей установки, если кто-то хочет увидеть больше, пожалуйста, спросите. К вашему сведению, я выкидываю исключение, удаляя детали строки подключения из моего web.config
(это фактическая ошибка, которую мы видим во время развертывания, поэтому я хочу нацелиться именно на это)
<system.webServer>
<httpErrors errorMode="Custom">
<remove statusCode="404" />
<error statusCode="404" path="/error/notfound" responseMode="ExecuteURL" />
<remove statusCode="403" />
<error statusCode="403" path="/error/forbidden" responseMode="ExecuteURL" />
<remove statusCode="500" />
<error statusCode="500" path="/error/" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
<!-- .... -->
<system.web>
<customErrors mode="On" defaultRedirect="~/Error" redirectMode="ResponseRewrite">
<error redirect="~/Error/NotFound" statusCode="404" />
<error redirect="~/Error/Forbidden" statusCode="403" />
<error redirect="~/Error/" statusCode="500" />
</customErrors>
</system.web>
У меня тогда есть ErrorController со значением по умолчанию Index()
функция (нет точки останова в этом контроллере)
public ViewResult Index()
{
return View("Error");
}
Примечание: у меня есть функции для Forbidden()
а также NotFound()
- Я просто не скопировал их здесь - эти ошибки работают отлично.
3 ответа
У вас есть все те корни, которые вы указали в web.config? Кажется, у вашего контроллера просто есть действие index, возвращающее некоторое представление, но оно должно иметь NotFound
а также Forbidden
действия, или, по крайней мере, правильные маршруты, такие как:
routes.MapRoute(
"NotFound",
"Error/NotFound",
new { controller = "Error", action = "Index" }, //bind all routes to single action
null, controllerNamespaces
);
routes.MapRoute(
"Forbidden",
"Error/Forbidden",
new { controller = "Error", action = "Index" }, //bind all routes to single action
null, controllerNamespaces
);
Если у вас не настроены действия NotFound и Forbidden, эти ошибки, скорее всего, вызовут второе исключение, которое отправляется на вашу страницу индекса, поскольку это значение по умолчанию. Попытайтесь добавить эти два других к вашему контроллеру и посмотрите, не пострадают ли они, и, возможно, вы сможете найти проблему проще.
Также обратите внимание, что ResponseRewrite не совместим с mvc, см. Ответ здесь: CustomErrors не работает при установке redirectMode="ResponseRewrite"
Вы не можете использовать redirectMode="ResponseRewrite" при перенаправлении на другое действие, вы должны использовать redirectMode="ResponseRedirect". Вы потеряете возможность использовать Server.GetLastError(), но если вам это не нужно, у вас все будет хорошо.