2013-08-01 3 views
1

У меня есть настраиваемый обработчик ошибок для отображения диагностической информации для пользователя, если произошел сбой. Проблема заключается в том, что пользовательская страница ошибки не отображается, и я получаю исключение (в соответствии с веб-страницей), брошенное при попытке показать страницу с ошибкой. Я не могу понять, что вызывает его? У меня есть аналогичные страницы для 500 и 404 ошибок, которые работают нормально.Пользовательская страница ошибки не отображается, когда выбрано исключение

Страница ошибки говорит Server Error in '/' Application.

Описание: Произошло исключение при обработке запроса. Кроме того, при выполнении пользовательской страницы ошибки для первого исключения произошло другое исключение. Запрос был прерван.

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

+0

Не могли бы вы сообщить подробности об ошибке? – Sergio

ответ

2

У вас есть все те корни, которые вы указали в web.config? Кажется, что ваш контроллер просто указательный действие, возвращая некоторое представление, но оно должно иметь 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 
); 
+0

Обе страницы ошибок работают отлично – Chris

1

Если у вас нет NotFound и Запрещенные действия установка этих ошибок, вероятно, вызовет второе исключение, которое отправится на вашу индексную страницу, поскольку это значение по умолчанию. Пытаясь добавить этих двух других своих контроллеров и посмотреть, попадают ли они, и, возможно, вы можете найти проблему легче.

отметить также, что ResponseRewrite не совместим с MVC, смотрите ответ здесь: CustomErrors does not work when setting redirectMode="ResponseRewrite"

+0

Эти страницы/коды ошибок работают нормально – Chris

0

Вы не можете использовать redirectMode = «ResponseRewrite» при перенаправлении к другому действию, вы должны использовать redirectMode = «ResponseRedirect». Вы потеряете возможность использовать Server.GetLastError(), но если вам это не понадобится, все будет в порядке.