C#2.0には、スローされた例外を処理するHttpModule
があります。例外がスローされるたびに、クエリ文字列を含むエラーページ(aspx)が呼び出されます。 Server.Transfer()
を介して行われます。
ただし、コントロールがServer.Transfer()
を実行しようとすると、次の例外がスローされます。
[ページ名] .aspxの子リクエストの実行エラー。
一方、Request.Redirect()
は正常に機能します。
リクエストの転送先のページのPageディレクティブに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を使用できます。 。
2つの方法の違いは、この回答で説明されています: TransferRequest vs Transfer in ASP.Net
私の修正は異なっていました:
オンラインクエリが生成されました このマイクロソフトサポート技術情報の記事 これは、Server.Transferの代わりにResponse.Redirectを使用するという解決策を示しています。
コマンドを変更すると、不可解な「子リクエストの実行エラー」メッセージの代わりに、より正確な「404エラーメッセージ」が表示されました。
それでリダイレクト文字列を調べることになり、パスがオフになっていることに気付きました。
転送文字列を「ErrorPage.aspx」から「../ ErrorPage.aspx」(パスの変更に注意)に修正し、Server.Transferは正常に機能しました。
デバッグ中にVS.NET IDEでこの例外が発生する場合は、少なくとも1回進み、F5を押してデバッグを続行してください。私の場合、実際のページはASPでレンダリングされましたreallyであった.NET例外が問題の原因でした。私の場合、間違った形式のasp:ChangePassword
実際にが「子リクエストの実行エラー」例外を引き起こしたコントロール。
私が変更され Server.Transfer にとって Server.TransferRequest、その後、私は本当の例外を背後に持っています。不適切なReportViewerバージョンへの参照に関する問題でした。
これと同じ問題があり、Server.Transferが実行されている場所とリダイレクト先の相対パスに関係していることがわかりました。私の場合、これはサブディレクトリで実行されていたため、@ rayの答え(URLの先頭に../を追加)が機能しました。しかし、その後、上記のディレクトリで実行すると、同じことが起こりました。したがって、ルートパスを使用するように変更しました。
Server.Transfer("~/errorpage.aspx")
Server.Transfer( "mywebpage.aspx")は、セッションが既に存在する場合にのみ機能するようです。
セッションが開始されていない場合、このエラーがスローされるため、Response.Redirectまたは別のメソッドを使用する必要があります。
これはバグではなく、設計によるものです。 http://support.Microsoft.com/kb/320439 を参照してください