2

Microsoft.Web.Infrastructureアセンブリを使用すると、次のように、アプリケーションの開始前のフェーズでモジュールを登録できます。

DynamicModuleUtility.RegisterModule(typeof(MyHttpModule));

PageHandlerFactory上記の例のように、モジュールでASP.NET Webフォームにカスタムをコードで登録することは可能ですか?

私は現在、このようなコードを介してこれを配線していますが、冗長すぎることがわかります(web.configを変更する必要があるため、クイックスタートNuGetパッケージを作成するのがはるかに難しくなります):

<?xml version="1.0"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="CustomFactory" verb="*" path="*.aspx"
        type="Shared.CustomPageHandlerFactory, Shared"/>
    </handlers>
  </system.webServer>
</configuration>
4

1 に答える 1

1

私の知る限り、これをコードで行う方法はありません。しかし、私の特定の状況では、解決策は実際にはHTTPモジュールを登録することでした。

HTTPモジュールは、初期化時にHttpApplication.PreRequestHandlerExecuteイベントにフックできます。このイベントは、ページハンドラーのファクトリがページを作成した後、ASP.NETがそのページ(および他のハンドラー)の実行を開始する前に実行されます。

このようなHTTPモジュールの例を次に示します。

public class MyHttpModule : IHttpModule
{
    void IHttpModule.Dispose() {
    }

    void IHttpModule.Init(HttpApplication context) {
        context.PreRequestHandlerExecute += 
            this.PreRequestHandlerExecute;
    }

    private void PreRequestHandlerExecute(object s, EventArgs e) {
        IHttpHandler handler = 
            this.application.Context.CurrentHandler;

        // CurrentHandler can be null
        if (handler != null) {
            // TODO: Initialization here.
        }            
    }
}
于 2013-03-26T09:28:34.300 に答える