0

私はASP.Netアプリケーションに取り組んでおり、現在Global.asaxには通常の5つのメソッドが含まれています。

  1. Application_Start
  2. Application_End
  3. Session_Start
  4. Session_End
  5. アプリケーションエラー

ただし、Application_AuthenticateRequestメソッドも実装する必要がありました。これは問題ではありません。Global.asaxに追加したばかりですが、別のアプリケーションでは、このメソッドがIHttpModuleインターフェイスを実装する別のクラスの別の場所に実装されているのを確認しました。

これはどのように可能ですか?同じアプリにはGlobal.asaxがなくApplication_AuthenticateRequest、Global.asaxは次のようになります。

void Application_BeginRequest(object sender, EventArgs e)
{
    myConfig.Init();
}

void Application_Start(object sender, EventArgs e)
{
    // Code that runs on application startup
    myConfig.Init();
    if (InstallerHelper.ConnectionStringIsSet())
    {
        //initialize IoC
        IoC.InitializeWith(new DependencyResolverFactory());

        //initialize task manager
        TaskManager.Instance.Initialize(NopConfig.ScheduleTasks);
        TaskManager.Instance.Start();
    }
}

void Application_End(object sender, EventArgs e)
{
    //  Code that runs on application shutdown
    if (InstallerHelper.ConnectionStringIsSet())
    {
        TaskManager.Instance.Stop();
    }
}

Application_AuthenticateRequestメソッドを実行する理由は何ですか?

4

2 に答える 2

2

まず、ASP.NETのHTTPハンドラーとモジュールについて読むことをお勧めします。次に、ASP.NETアプリケーションで、すべての要求に対して実行される複数のモジュールを登録でき、Global.asaxで実行できるのと同じ方法で、要求ライフサイクルのさまざまなイベントをサブスクライブできることがわかります。このアプローチの利点は、複数のアプリケーションで使用する再利用可能なアセンブリにモジュールを配置できることです。これにより、同じコードを何度も繰り返す必要がなくなります。

于 2012-09-21T10:57:08.693 に答える
1

基本的に、私が見てきた例では、独自のHTTPモジュールを作成し、それをweb.configファイルに登録しました。

彼らは次のような新しいHTTPモジュールを作成しました。

public class MembershipHttpModule : IHttpModule
{
    public void Application_AuthenticateRequest(object sender, EventArgs e)
    {
        // Fires upon attempting to authenticate the user
        ...
    }

    public void Dispose()
    {
    }

    public void Init(HttpApplication application)
    {
        application.AuthenticateRequest += new EventHandler(this.Application_AuthenticateRequest);
    }
}

また、以下をweb.configファイルに追加しました。

<httpModules>
  <add name="MembershipHttpModule" type="MembershipHttpModule, App_Code"/>
</httpModules>   

上記の@DarinDimitrovのリンクで説明されているように、要求パイプラインから通知を受信するには、モジュールを登録する必要があります。HTTPモジュールを登録する最も一般的な方法は、アプリケーションのWeb.configファイルにあります。IIS 7.0では、統合要求パイプラインを使用して、IISマネージャーやAppcmd.exeコマンドラインツールなど、他の方法でモジュールを登録することもできます。

于 2012-09-21T11:18:43.600 に答える