Подтвердить что ты не робот

Server.Transfer throws Ошибка выполнения дочернего запроса. Как разрешить?

У меня есть HttpModule в С# 2.0, который обрабатывает исключенные исключения. Всякий раз, когда исключение выбрасывается, вызывается страница с ошибкой (aspx) с некоторым запросом. Это делается через Server.Transfer().

Но когда элемент управления пытается выполнить Server.Transfer(), генерируется следующее исключение:

Ошибка выполнения дочернего запроса для [pagename].aspx.

В то время как Request.Redirect() работает нормально.

Я попытался установить EnableViewStateMac="false" в директиве страницы страницы, на которую передается запрос. Все еще проблема сохраняется.

Вот код, который я пробовал:

string errorPage = "errorpage.aspx?id=" + someErrorId
HttpContext.Current.Server.Transfer(errorPage,true);

Любая идея, как это можно решить?

4b9b3361

Ответ 1

Я нашел альтернативу Server.Transfer()

Я использовал

 HttpContext.Current.RewritePath("somefile.aspx");

Это решило проблему.

Ответ 2

Я подключался к конвейеру запроса в событии OnPreRequestHandlerExecute и обнаружил, что не могу использовать Server.Transfer, потому что он выдал ту же ошибку, что и ваша, о выполнении дочернего запроса.

Использование HttpContext.Current.RewritePath не сработало, потому что оно, казалось, игнорировалось, и я нигде не перенаправлялся.

Если вы используете IIS 7 и выше, вы можете использовать Server.TransferRequest, что сделало трюк для меня.

В этом ответе рассматриваются различия между этими двумя способами: TransferRequest vs Transfer в ASP.Net

Ответ 3

Мое исправление было другим:

Онлайн-запрос, созданный этой статьей базы знаний Майкрософт, в которой говорится, что разрешение будет заключаться в использовании Response.Redirect вместо Server.Transfer.

Я изменил команду и получил более точное сообщение об ошибке "404" вместо критического сообщения "Ошибка выполнения дочернего запроса".

Это привело меня к проверке строки перенаправления, и я заметил, что мой путь отключен.

Я установил строку переноса из "ErrorPage.aspx" в "../ErrorPage.aspx" (обратите внимание на изменение пути) и Server.Transfer работал отлично.

Ответ 4

Если вы обнаружите, что это исключение встречается в ID.NET VS.NET во время отладки, пройдите хотя бы один раз и нажмите F5, чтобы продолжить отладку. В моем случае фактическая страница делала визуализацию с помощью исключения ASP.NET, которое действительно вызывало проблему. В моем случае у меня был некорректно отформатированный элемент управления asp:ChangePassword, который фактически вызывал исключение "Ошибка выполнения дочернего запроса".

Ответ 6

Server.Transfer( "mywebpage.aspx" ) работает только тогда, когда сеанс уже существует.

Если сеанс не запущен, он выдает эту ошибку, поэтому вы должны использовать Response.Redirect или другой метод.

Ответ 7

У меня была такая же проблема, и я обнаружил, что это связано с относительными путями, в которых работает Server.Transfer, и где вы перенаправляетесь. В моем случае это выполнялось в подкаталоге, поэтому работал @ray answer (добавление../к началу URL-адреса). Однако, когда я затем выполнил в каталоге выше, произошло то же самое. Поэтому я перешел на использование корневого пути:

Server.Transfer("~/errorpage.aspx")

Ответ 8

Я изменил Server.Transfer для Server.TransferRequest, затем у меня есть настоящее исключение. Это была проблема со ссылкой на неверную версию ReportViewer.