共用方式為


HttpHandler Factory

您可以建立實作 IHttpHandlerFactory 介面的類別,來產生每個 HTTP 要求的新處理常式執行個體。在下列範例中,HttpHandler Factory 會針對HTTP GET 要求和 HTTP POST 要求而建立不同的處理常式。其中一個處理常式是上述範例中的 同步處理常式 的執行個體;另一個處理常式則是非同步處理常式範例的一個執行個體。

using System;
using System.Web;

namespace Handlers
{
    class HandlerFactory : IHttpHandlerFactory
    {
        public IHttpHandler GetHandler(HttpContext context, string requestType, String url, String pathTranslated)
        {         
            IHttpHandler handlerToReturn;
            if("get" == context.Request.RequestType.ToLower())
            {
                handlerToReturn = new SynchHandler();
            }
            else if("post" == context.Request.RequestType.ToLower())
            {
                handlerToReturn = new AsynchHandler();
            }
            else
            {
                handlerToReturn = null;
            }
            return handlerToReturn;
        }
        public void ReleaseHandler(IHttpHandler handler)
        {
        }
        public bool IsReusable
        {
            get
            {
                // To enable pooling, return true here.
                // This keeps the handler in memory.
                return false;
            }
        }
    }
}


[Visual Basic]
Imports System
Imports System.Web

Namespace Handlers
    Class HandlerFactory
        Implements IHttpHandlerFactory

        Public Function GetHandler(ByVal context As HttpContext, ByVal requestType As String, ByVal url As [String], ByVal pathTranslated As [String]) As IHttpHandler Implements IHttpHandlerFactory.GetHandler            
            Dim handlerToReturn As IHttpHandler
            If "get" = context.Request.RequestType.ToLower() Then
                handlerToReturn = New SynchHandler()
            Else
                If "post" = context.Request.RequestType.ToLower() Then
                    handlerToReturn = New AsynchHandler()
                Else
                    handlerToReturn = Nothing
                End If
            End If
            Return handlerToReturn
        End Function

        Public Sub ReleaseHandler(ByVal handler As IHttpHandler) Implements IHttpHandlerFactory.ReleaseHandler
        End Sub

        Public ReadOnly Property IsReusable() As Boolean
            Get
                ' To enable pooling, return true here.
                ' This keeps the handler in memory.
                Return False
            End Get
        End Property
    End Class
End Namespace

藉由建立 Web.config 項目來註冊自訂 HttpHandler Factory,如下所示:

<configuration>
    <system.web>
        <httpHandlers>
            <add verb="GET,POST" path="*.MyFactory"
                 type="Handlers.HandlerFactory, Handlers" />
        </httpHandlers>
    </system.web>
</configuration>

請參閱

HttpHandler | 建立 HttpHandler