HttpModule内のページにアクセスしようとしていますが、これを行うにはHttpContext.Current.Handler(これは現在のページを参照する必要があります)を呼び出す必要がありますが、常にnullになっています。なぜHttpContext.Current.Handlerがnullですか?
私は.NET 3.5フレームワークを使用して開発しています。
は私がAuthorizeRequestとしたAuthenticateRequest
おかげでこれをチェックしています。
HttpModule内のページにアクセスしようとしていますが、これを行うにはHttpContext.Current.Handler(これは現在のページを参照する必要があります)を呼び出す必要がありますが、常にnullになっています。なぜHttpContext.Current.Handlerがnullですか?
私は.NET 3.5フレームワークを使用して開発しています。
は私がAuthorizeRequestとしたAuthenticateRequest
おかげでこれをチェックしています。
おそらく、要求がまだハンドラに渡されていない可能性があります(たとえば、BeginRequest
にあります)。
どのような方法でこのプロパティにアクセスしていますか?
IHttpModule.Init
には、null
となります。 Init
メソッドのパラメータとして受け取ったapplication
にイベントハンドラを登録し、そこで作業する必要があります。
私はAuthorizeRequestとAuthenticateRequestをチェックしています – Paleta
AuthorizeRequest
およびAuthenticateRequest
では、ハンドラはまだ作成されていません。 (要求が拒否された場合はハンドラを作成しないでください)。したがって、このプロパティはnullです。
なぜあなたはPage
ですか、何をしようとしていますか?
あなたはそれがPage
を解決した後に発生する、PostMapRequestHandler
を処理してみてください、とあなたが要求を拒否することを決定した場合HttpException
または呼び出しResponse.End
を投げることができました。
ただし、ハンドラのインスタンスを取得するには、そのコンストラクタを実行する必要があります。それが何か重要なことや敏感なことをしないことを確認してください。
私は同様の問題があり、最終的に解決策を見つけました。 私の問題はnullを返し、このコードを外部クラスで使用しました。 私の英語は苦手です。コード経由
ソリューション:(テストしている)
によってテスト:VS 2010
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
//[Description of MyNamespace]
//|================================================================================>
//|-----*(In The Name Of GOD)*-----
//|================================================================================>
namespace MyNamespace
{
//Most Be "partial class" And ": System.Web.UI.Page" !!!!
public partial class MyClass : System.Web.UI.Page
{
//|============================================================>
//| Value Of Class.
//|============================================================>
static System.Web.UI.Page Page1 = null;
static System.Web.UI.Page Page2 = null;
int form1Index = -0;
//Most Be Static Method!!!!
public static void GetMyPage()
{
//Both are a result code.
//هر دو کد یه نتیجه می دهد
Page1 = HttpContext.Current.Handler as System.Web.UI.Page;
Page2 = (System.Web.UI.Page)System.Web.HttpContext.Current.Handler;
}
//|============================================================>
//| DO() Methods Of MyClass Class.
//|============================================================>
public void DO()
{
//Call Your Static Method => GetMyPage()
GetMyPage();
if (Page1 != null)
{
for (int i = 0; i < Page1.Controls.Count; i++)
{
if (Page1.Controls[i].ID == "form1")
{
form1Index = i;
break;
}
}
}
if (form1Index != -0)
{
for (int j = 0; j < Page1.Controls[form1Index].Controls.Count; j++)
{
string ControlsID = Page1.Controls[form1Index].Controls[j].ID;
// Code location ...
//محل قرار گیری کد ها...
}
}
}
//|============================================================>
//| Destructor Methods MyClass Class.
//|============================================================>
~MyClass() { }
}
}
私はAuthorizeRequestとしたAuthenticateRequest – Paleta
@Paletaにチェックしています:あなたはそこにそれを確認することはできません。ハンドラは、要求が認証/承認された後に選択されます。 'PostMapRequestHandler'イベント以降で確認できます。 –