2010-03-02 3 views
28

Ich habe eine HttpModule in C# 2.0, die Ausnahmen behandelt geworfen. Immer wenn die Ausnahme ausgelöst wird, wird eine Fehlerseite (aspx) mit einigen Querystrings aufgerufen. Es ist durch Server.Transfer() getan.Server.Transfer wirft Fehler beim Ausführen der untergeordneten Anfrage. Wie löst man?

Aber wenn die Steuerung versucht Server.Transfer() auszuführen, wird die folgende Ausnahme ausgelöst:

Fehler Kind Anfrage Ausführung für [Seitenname] aspx.

Während Request.Redirect() funktioniert gut.

Ich habe versucht, EnableViewStateMac="false" in Page-Direktive der Seite, auf die Anfrage übertragen wird. Das Problem besteht weiterhin.

Hier ist der Code, den ich versucht:

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

Jede Idee, wie dieses Problem gelöst werden kann?

+0

Das Problem ist die Berechtigung für IIS_IUSER. –

Antwort

18

fand ich eine Alternative zu Server.Transfer()

I

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

dies das Problem gelöst.

+6

Wie hast du es benutzt? Die Ausnahme * Fehler beim Ausführen der untergeordneten Anfrage * verschwand, aber ich bekomme eine leere Seite. –

+0

Sie müssen es in einem IHttpModule tun. Siehe http://msdn.microsoft.com/en-us/library/ms972974.aspx (leider ist der Artikel viel zu lang, das eigentliche Konzept ist ziemlich einfach). – mhenry1384

+0

Wenn Sie 'Server.Transfer' zur Verfügung haben, können Sie wahrscheinlich' Context.RewritePath' aufrufen, anstatt 'HttpContext.Current' aufzurufen, um ein HttpContext-Objekt zu erhalten :) –

0

Es ist kein Fehler, es ist von Entwurf. Siehe http://support.microsoft.com/kb/320439

+2

Ja, das hatte ich gesehen. Aber ich hatte eine Anforderung, die URL in der Adressleiste nicht zu ändern. – Amit

+3

Er leitet nicht zu ASP – JNF

+0

Es passiert, wo Sie umleiten. – Jamie

4

Wenn diese Ausnahme in der VS.NET-IDE beim Debuggen auftritt, gehen Sie mindestens einmal vor und drücken Sie F5, um mit dem Debuggen fortzufahren. 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 war tatsächlich verursacht die Ausnahme "Fehler beim Ausführen untergeordneten Anfrage".

+0

Das war es ... Danke – unexplored

+0

Ich glaube, dass dies auch in der 'InnerException' Eigenschaft der Ausnahme ausgesetzt ist. In meinem Fall war es eine fehlende Benutzerkontrolle. –

6

Mein fix war anders:

Eine Online-Abfrage this Microsoft Knowledge Base article erzeugt, die die Auflösung Response.Redirect statt Server.Transfer verwenden angegeben wäre.

änderte ich den Befehl und bekam eine genauere „404 Fehlermeldung“ anstatt die kryptische Nachricht „Fehler Kind Anfrage Ausführung“.

Das führte mich zur Überprüfung der Umleitungszeichenfolge und ich bemerkte, dass mein Pfad ausgeschaltet war.

Ich habe die Transfer String von "ErrorPage.aspx" auf "../ErrorPage.aspx" (beachten Sie die Pfadänderung) und Server.Transfer funktionierte einwandfrei.

+0

Ich habe festgestellt, dass ich dies in "~/ErrorPage.aspx" ändern musste, sonst würde es nicht mehr funktionieren, wenn ich von einem Unterverzeichnis zum Anwendungsstamm wechselte (siehe meine Antwort) – Tevin

0

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

Wenn keine Sitzung gestartet wurde, wird dieser Fehler ausgegeben, daher müssen Sie Response verwenden.Redirect oder eine andere Methode.

10

Ich war in der Request-Pipeline in der OnPreRequestHandlerExecute Ereignis, und ich konnte nicht Server.Transfer verwenden, weil es den gleichen Fehler wie Ihre über das Ausführen einer untergeordneten Anfrage ausgelöst hat.

Verwenden von HttpContext.Current.RewritePath funktionierte nicht, da es scheinbar ignoriert wurde und ich nirgends umgeleitet wurde.

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

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

+0

Das funktioniert großartig. –

0

Ich hatte das gleiche Problem, und entdeckt es mit den relativen Pfaden, wo die Server.Transfer läuft und wo Sie Umleitung zu tun war, zu. In meinem Fall wurde dies in einem Unterverzeichnis ausgeführt, so dass @ ray's Antwort (Hinzufügen von ../ zum Start der URL) funktioniert hat. Als ich dann im obigen Verzeichnis ausgeführt habe, ist das gleiche passiert. Daher habe ich einen verwurzelten Pfad verwendet:

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