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

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

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

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

Тогда как Request.Redirect() работает нормально.

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

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

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

Есть идеи, как это можно решить?

Ответы [ 7 ]

18 голосов
/ 02 марта 2010

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

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

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

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

10 голосов
/ 17 февраля 2015

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

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

Если вы используете IIS 7 и выше, вы можете вместо этого использовать Server.TransferRequest , что и помогло мне.

Различия между этими двумя методами описаны в этом ответе: TransferRequest и Transfer в ASP.Net

8 голосов
/ 21 февраля 2014

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

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

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

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

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

4 голосов
/ 18 октября 2012

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

0 голосов
/ 27 сентября 2016

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

Server.Transfer("~/errorpage.aspx")
0 голосов
/ 28 мая 2014

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

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

0 голосов
/ 02 марта 2010

Это не ошибка, это дизайн. Смотри http://support.microsoft.com/kb/320439

...