Ответ 1
Я нашел альтернативу Server.Transfer()
Я использовал
HttpContext.Current.RewritePath("somefile.aspx");
Это решило проблему.
У меня есть 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);
Любая идея, как это можно решить?
Я нашел альтернативу Server.Transfer()
Я использовал
HttpContext.Current.RewritePath("somefile.aspx");
Это решило проблему.
Я подключался к конвейеру запроса в событии OnPreRequestHandlerExecute и обнаружил, что не могу использовать Server.Transfer, потому что он выдал ту же ошибку, что и ваша, о выполнении дочернего запроса.
Использование HttpContext.Current.RewritePath не сработало, потому что оно, казалось, игнорировалось, и я нигде не перенаправлялся.
Если вы используете IIS 7 и выше, вы можете использовать Server.TransferRequest, что сделало трюк для меня.
В этом ответе рассматриваются различия между этими двумя способами: TransferRequest vs Transfer в ASP.Net
Мое исправление было другим:
Онлайн-запрос, созданный этой статьей базы знаний Майкрософт, в которой говорится, что разрешение будет заключаться в использовании Response.Redirect вместо Server.Transfer.
Я изменил команду и получил более точное сообщение об ошибке "404" вместо критического сообщения "Ошибка выполнения дочернего запроса".
Это привело меня к проверке строки перенаправления, и я заметил, что мой путь отключен.
Я установил строку переноса из "ErrorPage.aspx" в "../ErrorPage.aspx" (обратите внимание на изменение пути) и Server.Transfer работал отлично.
Если вы обнаружите, что это исключение встречается в ID.NET VS.NET во время отладки, пройдите хотя бы один раз и нажмите F5, чтобы продолжить отладку. В моем случае фактическая страница делала визуализацию с помощью исключения ASP.NET, которое действительно вызывало проблему. В моем случае у меня был некорректно отформатированный элемент управления asp:ChangePassword
, который фактически вызывал исключение "Ошибка выполнения дочернего запроса".
Это не ошибка, это по дизайну. См. http://support.microsoft.com/kb/320439
Server.Transfer( "mywebpage.aspx" ) работает только тогда, когда сеанс уже существует.
Если сеанс не запущен, он выдает эту ошибку, поэтому вы должны использовать Response.Redirect или другой метод.
У меня была такая же проблема, и я обнаружил, что это связано с относительными путями, в которых работает Server.Transfer, и где вы перенаправляетесь. В моем случае это выполнялось в подкаталоге, поэтому работал @ray answer (добавление../к началу URL-адреса). Однако, когда я затем выполнил в каталоге выше, произошло то же самое. Поэтому я перешел на использование корневого пути:
Server.Transfer("~/errorpage.aspx")
Я изменил Server.Transfer для Server.TransferRequest, затем у меня есть настоящее исключение. Это была проблема со ссылкой на неверную версию ReportViewer.