Пользовательская страница ошибки не отображается при возникновении исключения

Я настроил пользовательский обработчик ошибок, чтобы показать диагностическую информацию пользователю, если происходит сбой. Проблема в том, что пользовательская страница ошибки не отображается, и я получаю исключение (согласно веб-странице) при попытке показать страницу ошибки. Я не могу понять, что вызывает это все же? У меня есть похожие страницы для 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(), но если вам это не нужно, у вас все будет хорошо.

Другие вопросы по тегам