2009-02-25 14 views
4

私は、次の例のページの構造を有する:Webpage.aspxServer.Executeからaspxページが呼び出されたかどうかを検出する方法?

  • Script.aspx

私はWebpage.aspxからServer.Execute("Script.aspx")を呼び出す場合、どのように私はそれことScript.aspxに検出することができますWebブラウザから直接ではなくWebpage.aspxから呼び出されましたか?

私はリファラーをチェックしようとしましたが、これはドメインのみを返し、スクリプトは返しません。

私は、要求がRequest.IsLocalを介してローカルであれば、少なくともあなたが言うことができる.NET 3.5

答えて

6

Script.aspx.csで、あなたは、単に現在の実行パスと比較してRequest.Pathを確認することができます。

if (Request.CurrentExecutionFilePath == Request.Path) 
{ 
    //This has been called from a web browser 
} else { 
    //This has been executed from the file Request.Path 
} 

なぜですか?

Server.Executeを呼び出すと、リクエストの一部がそのまま渡されます。したがって、Web.aspx.csでServer.Executeを使用した後で、Script.aspx.csからRequest.Pathの値を調べると、値は "/Webpage.aspx"になります。

ただし、WebブラウザがScript.aspxに直接アクセスする場合、Script.aspx.csのRequest.Pathの値は「/Script.aspx」になります。 currentExecutionPathは常に現在実行されているスクリプトを生成するので、2つを比較すると目的の結果が得られます。

これが役に立ちます。

+0

ありがとうございます。これは、私がscript.aspxの外で余分な仕事をする必要がなかったので、提案された最良の方法でした:) – GateKiller

0

上のASP.NET Webフォームを使用しています。

+0

ブラウザの要求がローカルサーバーからのものだった場合にのみtrueを返します。私の場合は、常にfalseを返します。その場合には – GateKiller

+0

、私は本当に元のページに戻って参照があるとは思わない。おそらく他の人が言ったように、この情報をクエリ文字列 – baretta

0

(WebPage.aspxから呼び出されたことを識別するのに役立つ)ScriptTextにパラメータを渡すことができます。

Server.Execute("script.aspx?xFrom=webPage.aspx")

編集:私はあなたがそれがwebpage.aspxを実行していることを知っているの要求はそれにいくつかの値を持つべきだと思います。

EDIT2:Request.Url?

12

Server.Executeは元のページと同じコンテキストで新しいページを実行するため、RequestのすべてのプロパティはWebpage.aspxへの元の要求を反映する必要があります(CurrentExecutionFilePathは "/ Script.aspx" )。 Request.Pathは "/Webpage.aspx"を含む必要がありますが、ドメインやクエリ文字列を参照する必要がある場合は、Request.Urlが完全なUriオブジェクトを提供します。

また、あなたは、その後のためにサブストリングの一致を行うことができ、要求されたページへのURLを返しますScript.aspx

+0

+1にContext.Itemsを使用するために渡すための最良の方法です。 – Sam

+0

+1サムと同じ理由で+1した。いいね! :-) –

0

HttpRequest.FilePathでそれらをのServer.Executeを呼び出す前Context.Itemsに値を追加して読むことができます」 Script.aspx "

(私の.NETはかなり貧弱である、しかし塩の巨大な穀物でこの答えを取る。)

+0

これは "Script.aspx"を返しますが、 "Webpage.aspx"を返すようにします。答えをありがとう。 – GateKiller

+0

保留中...代わりにCGI 'SCRIPT_NAME'変数を試してください。私は今、これをテストするためのASPボックスを持っていないが、うまくいけば、PHP(この場合は正しいことをしている)と同じように動作するはずです。 – flussence

0

あなたがIHttpHandlerファンドを持っていないと仮定すると、HttpContext.PreviousHandlerがヌルでないかどうかを確認できます。しかし、PreviousHandlerを設定できるのは何百(何通りか)の理由があるため、SteveMegsonがServer.Executeを呼び出す前にHttpContext.Itemsを使用することをお勧めします。

関連する問題