wake-up-neo.com

Server.Transfer wirft Fehler beim Ausführen der untergeordneten Anforderung. Wie zu lösen?

Ich habe eine HttpModule in C # 2.0, die Ausnahmen behandelt. Immer wenn die Exception ausgelöst wird, wird eine Fehlerseite (aspx) mit etwas Querzeichenfolge aufgerufen. Dies erfolgt über Server.Transfer().

Wenn das Steuerelement versucht, Server.Transfer() auszuführen, wird die folgende Ausnahme ausgelöst:

Fehler beim Ausführen der untergeordneten Anforderung für [Seitenname] .aspx.

Während Request.Redirect() gut funktioniert. 

Ich habe versucht, EnableViewStateMac="false" in der Page-Direktive der Seite festzulegen, an die die Anforderung übertragen wird. Das Problem bleibt bestehen.

Hier ist der Code, den ich ausprobiert habe:

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

Irgendeine Idee, wie das gelöst werden kann?

29
Amit

Ich habe eine Alternative zu Server.Transfer () gefunden.

Ich benutzte

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

Dies hat das Problem gelöst.

18
Amit

Ich habe mich im OnPreRequestHandlerExecute -Ereignis mit der Anforderungspipeline verbunden und festgestellt, dass ich Server.Transfer nicht verwenden kann, da derselbe Fehler wie bei der Ausführung einer untergeordneten Anforderung ausgegeben wurde. 

Die Verwendung von HttpContext.Current.RewritePath funktionierte nicht, da dies scheinbar ignoriert wurde und ich nirgendwo umgeleitet wurde.

Wenn Sie IIS 7 oder höher verwenden, können Sie stattdessen Server.TransferRequest verwenden, was für mich der Trick war.

Die Unterschiede zwischen den beiden Methoden werden in dieser Antwort behandelt: TransferRequest vs Transfer in ASP.Net

10
Karl

Mein Fix war anders:

Eine Online-Abfrage erzeugte dieser Microsoft Knowledge Base-Artikel , in der angegeben wurde, dass als Lösung Response.Redirect anstelle von Server.Transfer verwendet werden sollte.

Ich habe den Befehl geändert und eine genauere Meldung "404 Fehlermeldung" anstelle der kryptischen Meldung "Fehler beim Ausführen der untergeordneten Anforderung" erhalten.

Das veranlasste mich, die Umleitungszeichenfolge zu untersuchen, und ich bemerkte, dass mein Weg abgelaufen war.

Ich habe den Transferstring von "ErrorPage.aspx" in "../ErrorPage.aspx" korrigiert (beachten Sie die Pfadänderung) und Server.Transfer hat gut funktioniert.

8
ray

Wenn diese Ausnahme während des Debugging in VS.NET IDE auftritt, gehen Sie mindestens einmal vor und drücken Sie die Taste F5, um das Debugging fortzusetzen. In meinem Fall wurde die tatsächliche Seite mit der ASP.NET-Ausnahme gerendert, die wirklich das Problem verursacht hat. In meinem Fall hatte ich ein falsch formatiertes asp:ChangePassword-Steuerelement, das tatsächlich die Ausnahme "Fehler beim Ausführen der untergeordneten Anforderung" verursachte.

4
atconway

Ich habe mich verändert Server.Transfer zum Server.TransferRequest, dann habe ich die wirkliche Ausnahme hinter mir. Es gab ein Problem mit einem Verweis auf eine falsche ReportViewer-Version.

Ich hatte das gleiche Problem und stellte fest, dass es sich auf die relativen Pfade der Server.Transfer-Server und der Weiterleitung bezieht. In meinem Fall wurde dies in einem Unterverzeichnis ausgeführt, so dass die Antwort von @ ray (Hinzufügen von ../ am Anfang der URL) funktionierte. Als ich dann im obigen Verzeichnis ausgeführt wurde, passierte dasselbe. Daher habe ich einen verwurzelten Pfad verwendet:

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

Server.Transfer ("mywebpage.aspx") scheint nur zu funktionieren, wenn bereits eine Sitzung vorhanden ist. 

Wenn keine Session gestartet ist, wird dieser Fehler ausgegeben. Daher müssen Sie Response.Redirect oder eine andere Methode verwenden.

0
Ben

Es ist kein Fehler, es ist beabsichtigt. Siehe http://support.Microsoft.com/kb/320439 .

0
Jamie