asp.net - route - asp page tag helper
¿Alguna forma de agregar HttpHandler mediante programación en.NET? (2)
He estado investigando esto un poco, pero no he encontrado una respuesta. ¿Hay alguna forma de agregar un HttpHandler a un sitio web de ASP.NET sin agregarlo a web.config?
Al agregar un HttpHandler, asumo que te refieres a los archivos de configuración
<system.web>
<httpHandlers>...</httpHandler>
</system.web>
Hay una forma de controlarlo automáticamente, agregando el IHttpHandler
directamente durante la solicitud. Por lo tanto, en PostMapRequestHandler en el Ciclo de vida de la aplicación , haría lo siguiente, en su propio IHttpModule
personalizado:
private void context_PostMapRequestHandler(object sender, EventArgs e)
{
HttpContext context = ((HttpApplication)sender).Context;
IHttpHandler myHandler = new MyHandler();
context.Handler = myHandler;
}
Y eso establecería automáticamente el controlador para esa solicitud. Obviamente, es probable que desee envolver esto en alguna lógica para verificar cosas como el verbo, la solicitud de url, etc. Pero así es como se haría. También es así como funcionan muchos Rewriters de URL como:
http://urlrewriter.codeplex.com
Sin embargo, desafortunadamente, el uso del controlador de configuración precreado que hace web.confi g hace, está oculto y no parece ser accesible. Se basa en una interfaz llamada IHttpHandlerFactory
.
Actualización El IHttpHandlerFactory
se puede usar como cualquier otro IHttpHandler, solo se usa como un punto de inicio en lugar de un punto de procesamiento. Ver este articulo
Puede utilizar una clase IRouteHandler.
- Implemente la interfaz IRouteHandler en una nueva clase y devuelva el hander como resultado de su método
GetHttpHandler
- Registre su ruta /
Implementar IRouteHandler
public class myHandler : IHttpHandler, IRouteHandler
{
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
// your processing here
}
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return this;
}
}
Registrar ruta:
//from global.asax.cs
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Add(new Route
(
"myHander.axd",
new myHandler()
));
}
Nota: si utiliza los formularios web de Asp.Net, asegúrese de que su aplicación web tenga la configuración de UrlRouting en web.config como se explica aquí: Uso de enrutamiento con formularios web