Serveur.Le transfert crée une erreur en exécutant une requête enfant. Comment le résoudre?

j'ai un HttpModule en C# 2.0 qui gère les exceptions levées. Chaque fois que l'exception est lancée, une page d'erreur (aspx) avec quelques querystring sera appelée. Il est fait à travers Server.Transfer() .

mais lorsque la commande essaie d'exécuter Server.Transfer() , l'exception suivante est lancée:

erreur d'exécution d'une requête enfant pour [nom de page].aspx.

alors que Request.Redirect() fonctionne très bien.

j'ai essayé de définir EnableViewStateMac="false" dans la directive Page de la page à laquelle la requête est transférée. Toujours le problème persiste.

voici le code que j'ai essayé:

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

une idée de la façon dont cela peut être résolu?

29
demandé sur Stacked 2010-03-02 11:21:45

7 réponses

j'ai trouvé une alternative au serveur.Transfert()

j'ai utilisé

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

Cela a résolu le problème.

18
répondu Amit 2014-06-10 11:08:25

j'étais accroché dans le pipeline de requête dans l'événement OnPreRequestHandlerExecute , et j'ai trouvé que je ne pouvais pas utiliser le serveur.Transfert parce qu'il a lancé la même erreur que la vôtre à propos de l'exécution d'une demande enfant.

Utilisant HttpContext.Actuel.RewritePath n'a pas fonctionné car il semblait être ignoré et je n'ai été redirigé nulle part.

si vous utilisez IIS 7 et plus, vous pouvez utiliser le serveur .Demande de transfert au lieu de cela qui a fait le tour pour moi.

les différences entre les deux méthodes sont traitées dans cette réponse: TransferRequest vs Transfer in ASP.Net

10
répondu Karl 2017-05-23 11:54:51

ma solution était différente:

une requête en ligne produit cet article de base de connaissances de Microsoft qui a déclaré la résolution serait d'utiliser la réponse .Rediriger au lieu du serveur .Transférer .

j'ai changé la commande et j'ai obtenu un message d'erreur plus précis " "message d'erreur 404 " "au lieu du cryptique " erreur d'exécution de la demande de l'enfant " message.

qui m'a conduit à inspecter la chaîne de redirection et j'ai remarqué que mon chemin était éteint.

j'ai corrigé la chaîne de transfert de" ErrorPage.aspx" pour "../ ErrorPage.aspx "(notez le changement de chemin) et Server.Le transfert a très bien fonctionné.

7
répondu ray 2014-02-21 17:00:17

si vous voyez cette exception se produire dans le VS.NET IDE pendant le débogage, continuez au moins une fois et appuyez sur F5 pour continuer le débogage. Dans mon cas, la page réelle a rendu avec le ASP.NET exception qui était vraiment causant le problème. Dans mon cas, j'ai eu un contrôle incorrectement formaté asp:ChangePassword qui était réellement causant l'exception "erreur d'exécution de la requête de l'enfant".

4
répondu atconway 2012-10-18 14:54:27

ce n'est pas un bug, c'est de conception. Voir http://support.microsoft.com/kb/320439

0
répondu Jamie 2010-03-02 10:01:43

Server.Transfert ("mywebpage.aspx") ne semble fonctionner que lorsqu'une session existe déjà.

S'il n'y a pas de Session commencée il envoie cette erreur donc vous devez utiliser la réponse .Rediriger ou une autre méthode.

0
répondu Ben 2014-05-28 11:58:36

j'ai eu ce même problème, et j'ai découvert que c'était lié aux chemins relatifs d'où le serveur.Le transfert est en cours d'exécution et où vous rediriger. Dans mon cas, c'était l'exécution dans un sous-répertoire, donc la réponse de @ray (ajoutant ../ le début de l'URL). Cependant, quand j'ai ensuite exécuté dans le répertoire ci-dessus, la même chose s'est produite. Par conséquent, j'ai changé en utilisant un chemin enraciné:

Server.Transfer("~/errorpage.aspx")
0
répondu Tevin 2016-09-27 17:49:05