Compartir a través de


Generador de HttpHandler

Puede generar una nueva instancia de controlador para cada solicitud HTTP si crea una clase que implemente la interfaz IHttpHandlerFactory. En el siguiente ejemplo se utiliza un generador de controladores HttpHandler para crear controladores diferentes para una solicitud HTTP GET y para una solicitud HTTP POST. Uno de los controladores es una instancia del controlador sincrónico del ejemplo anterior y el otro es una instancia del ejemplo de controlador asincrónico.

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

Para registrar el generador de HttpHandler personalizado, cree una entrada en el archivo Web.config de la siguiente manera:

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

Vea también

HttpHandlers Crear HttpHandlers