5

次の宣言Web.configを含むファイルを考えてみましょう。httpHandlers

<httpHandlers>
  <add verb="*" path="*" type="MyWebApp.TotalHandlerFactory"/>
</httpHandlers>

つまり、このハンドラー ファクトリは、すべての着信要求を「確認」して、それらを処理する機会を得たいと考えています。ただし、必ずしもすべてを実際に処理する必要はなく、特定の実行時の条件を満たすものだけを処理する必要があります。

public sealed class TotalHandlerFactory : IHttpHandlerFactory
{
    public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)
    {
        if (some condition is true)
            return new MySpecialHttpHandler();

        return null;
    }

    public void ReleaseHandler(IHttpHandler handler) { }
}

ただし、このようにすると、既定の ASP.NET ハンドラーが完全にオーバーライドされます。つまり、ASP.NET ページと Web サービスが機能しなくなります。「if」の「何らかの条件」を満たさない URL ごとに空白のページが表示されます。したがって、戻るnullのは間違っているようです。

では、ASP.NET ページと Web サービスが引き続き正常に処理されるようにするには、代わりに何を返す必要があるのでしょうか?

4

4 に答える 4

2

System.Web.UI.PageHandlerFactory最も簡単な方法は、クラスが継承し、else 句で を呼び出すことだと思いますbase.GetHandler()

public sealed class TotalHandlerFactory : System.Web.UI.PageHandlerFactory
{
    public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)
    {
        if (some condition is true)
            return new MySpecialHttpHandler();
        else
            return base.GetHandler(context, requestType, url, pathTranslated)
    }
}
于 2012-02-06T15:52:18.480 に答える
0

一般的なケースでは、これを行うことはできません。

于 2012-02-10T17:41:51.507 に答える
0

すべての要件を知らなくても、HttpModule が問題のより適切なソリューションのように思えます。

于 2012-02-06T15:56:37.337 に答える