4

Application_BeginRequest メソッドが呼び出されたときに、リクエストがコールバックかどうかを検出する方法を見つける必要があります。

Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)<br />
    Dim _isCallBack As Boolean = False

    ' Code to set _isCallBack is True or False Here

    If Not _isCallBack Then
        '... Some Code
    End If
End Sub

「[ここで _isCallBack を True または False に設定するコード]」を何に置き換えるかを知る必要があります。

4

3 に答える 3

3

http://msdn.microsoft.com/en-us/magazine/cc163941.aspx
__CALLBACKID という単語を検索します 。

コールバック モードを決定するために、ASP.NET ランタイムは Request コレクションで __CALLBACKID エントリを探します。そのようなエントリが見つかった場合、ランタイムはコールバック呼び出しが行われていると判断します。

これは、Page.xxxx オブジェクトにアクセスできない app_code ファイル内から実行する必要がありました。これは私が最終的に使用したコードです:

If Not IsNothing(HttpContext.Current.Request("__CALLBACKID")) Then
    'The request is a callback
Else
    'The request is not a callback
End If

おそらく最も美しい解決策ではないかもしれませんが、それは仕事をします. しばらくの間 Array.IndexOf を使用していましたが、フォーム パラメータが小文字のパラメータとして返されることがあり (理由や方法がわからない)、Array.IndexOf は大文字と小文字を区別する検索です。

このような __XXXX リクエスト キーを探す際は注意してください。.net の将来のバージョンで名前が変更される可能性があるため、これらの要素に「ショートカット」するのは得策ではないということをどこかで読んだことを覚えています。それを覚えておいてください!

于 2009-08-24T20:44:30.190 に答える
2

私は似たようなものが必要で、ディーン L の答えに従って、.NET 自体が何をすべきかを知っている必要があると考えました。Reflector を使用した HttpResponse.Redirect メソッドを見ると、次のようなコードが表示されます。

Page handler = Context.Handler as Page;
if (handler != null && handler.IsCallback)
{
    //Code...
}

Global.asax で問題なく動作するようです。

于 2010-06-11T01:53:36.800 に答える