2009-09-10 13 views
0

System.Web.Page(つまり通常のページインスタンス)から派生したクラスのインスタンスを指定すると、相対URLそのページを要求するために必要です(Requestオブジェクトなし)。ページオブジェクトのインスタンスからページの相対URLを取得するにはどうすればいいですか

明確にするために、私はページの派生クラスを通常のページ要求パイプラインの外側にインスタンス化しています。

var p = new MyPage(); 
// p.Request is not going to be valid 

これからページをリクエストするために通常使用される適切なURLを取得するにはどうすればよいですか?

答えて

2

短い答えてみてください - あなたができない、あなたは後方それで来ているので。見る要求がなければ、「要求経路」は意味を持ちません。

ページオブジェクトは、呼び出されるパスを認識しません。実際、出力を生成するためにIHttpHandlerを実装しているのは単なる.netクラスです。

.aspxページが要求されると、IISはasp.netピープラインにそれを渡します。 asp.netエンジンは、パスに基づいて適切なハンドラを決定します。この場合、System.Web.UI.PageHandlerFactoryです。このクラスはリクエストパスを使用して、インスタンス化する正しいPageオブジェクトを見つけ出します。これは、要求パスを見て、それを使って.NETコードに.aspxをコンパイルし、コンパイル結果が得られるクラスをインスタンス化します。

残念ながらあなたのケースでは、PageHandlerFactory(実際にはBuildManager )を使用すると、コンパイルされたクラスへの仮想パス、つまり一方向のみで必要な情報を見つけることができます。複数のパスが(理論上は)1つのページにマップできるため、これは理にかなっています。

詳細については、asp.net request pipelineの記事を調べるか、System.WebのPageHandlerFactoryクラスまたはBuildManagerクラスを参照してください。

+0

ありがとうフィリップ - 私はこれが事実かもしれないと思っていたが、欠けていた解決策があるかどうか疑問に思った。それを回避する必要があります!乾杯。 –

0

System.Web.Pageには、派生クラスから見えるRequestプロパティがあります。

+0

私は知っていますが、私がページオブジェクトを直接インスタンス化すると、それに関連付けられたリクエストオブジェクトは存在しません。 –

+0

おそらく私はその質問を理解していないでしょう。どのようにHttpRequestのコンテキスト外のページオブジェクトにアクセスしていますか? –

+0

私は今質問をもっと明確に更新しています。 –

0

はRequest.VirtualPath

関連する問題