He estado investigando esto un poco, pero no he encontrado una respuesta: ¿hay alguna manera de agregar programáticamente un HttpHandler a un sitio web ASP.NET sin agregar al web.config?¿Alguna forma de agregar HttpHandler mediante programación en .NET?
Respuesta
Mediante la adición de un HttpHandler supongo que te refieres a los archivos de configuración
<system.web>
<httpHandlers>...</httpHandler>
</system.web>
hay una manera de controlar de forma automática, mediante la adición de la IHttpHandler
directamente durante la solicitud. Así que en la PostMapRequestHandler in the Application Lifecycle, tendría que hacer lo siguiente, en su propia costumbre IHttpModule
:
private void context_PostMapRequestHandler(object sender, EventArgs e)
{
HttpContext context = ((HttpApplication)sender).Context;
IHttpHandler myHandler = new MyHandler();
context.Handler = myHandler;
}
y que sería establecer automáticamente el controlador para esa petición. Obviamente, es probable que desee ajustar esto en alguna lógica para verificar cosas como el verbo, la solicitud de url, etc. Pero así es como se haría. Además, este es el número de grabadoras de URL funcionan populares tales como:
http://urlrewriter.codeplex.com
Lamentablemente, sin embargo, el uso de la pre built configuration handler that the web.confi g no, está escondido y no parece que sea accesible. Se basa en una interfaz llamada IHttpHandlerFactory
.
Actualización El IHttpHandlerFactory
se puede utilizar como cualquier otro IHttpHandler, solo se utiliza como punto de inicio en lugar de como punto de procesamiento. Vea este artículo.
Gracias Nick: esto es exactamente lo que estaba buscando. –
Tengo problemas para lograr que este enfoque funcione para mi situación. Las solicitudes a las que intento reasignar un controlador no corresponden a archivos físicos ni a ninguna de las rutas configuradas. ¿No se activará 'PostMapRequestHandler' en mi caso ya que no se encuentra ningún controlador para mapear la solicitud? Parece que el último evento que se activa para estas solicitudes es 'PostResolveRequestCache' y si intento restablecer' context.Handler' en ese o en cualquier controlador de eventos anterior, simplemente se ignora. – Lobstrosity
Pude hacerlo funcionar llamando 'context.RemapHandler()' (en lugar de configurar 'context.Handler' directamente) en el manejador de eventos' BeginRequest'. – Lobstrosity
Puede mediante el uso de una clase IRouteHandler.
- Implementar la interfaz IRouteHandler de una nueva clase y devolver el lanzador como el resultado de su
GetHttpHandler
método - 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;
}
}
Ruta de registro:
//from global.asax.cs
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Add(new Route
(
"myHander.axd",
new myHandler()
));
}
Nota: Si está utilizando ASP.NET WebForms a continuación, asegurar su aplicación Web tiene la configuración UrlRouting en el web.config como se explica aquí: Use Routing with Web Forms
Gracias! Exactamente lo que necesitaba ... – rocky
- 1. Agregar PageControl mediante programación
- 2. ¿Hay alguna forma de minimizar mediante programación una ventana?
- 3. ¿Hay alguna forma de convertir mediante programación cadenas de formato VB6 a cadenas de formato .NET?
- 4. agregar mediante programación gatillo estilo
- 5. C# Visual Studio ... agregar referencias mediante programación
- 6. Cómo agregar mediante programación vista en ViewFlipper
- 7. ¿Hay alguna forma de cambiar la contraseña de gmail mediante programación mediante Java?
- 8. Agregar un nuevo usuario de subversión mediante programación con C#
- 9. Agregar evento personalizado mediante programación en el calendario de iPhone
- 10. iOS: agregar/eliminar una subvista mediante programación
- 11. WPF ListView: cómo agregar elementos mediante programación.
- 12. Agregar un certificado de confianza mediante programación en Java
- 13. Agregar botones mediante programación a un fragmento
- 14. Cómo agregar vistas a vistas mediante programación
- 15. Cómo agregar una referencia mediante programación
- 16. ¿Agregar ScriptManager a la página mediante programación?
- 17. Facebook: ¿Puedo agregar un amigo mediante programación?
- 18. ¿Cómo agregar imágenes para verlas mediante programación?
- 19. Agregar controles mediante programación al formulario WPF
- 20. Agregar celdas mediante programación a UITableView
- 21. Cómo agregar/quitar la referencia mediante programación?
- 22. Agregar recursos a Jetty mediante programación
- 23. Cómo agregar un atributo mediante programación
- 24. Agregar reglas de resaltado de sintaxis a AvalonEdit mediante programación
- 25. ¿Hay alguna forma de importar ICS mediante programación en Google Calendar?
- 26. ¿Hay alguna forma de activar y desactivar el bluetooth y/o wifi mediante programación en iOS?
- 27. Cómo agregar controles mediante programación a un formulario en VB.NET
- 28. ¿Consulta mediante programación MSDN?
- 29. Agregar DLL mediante programación en el tiempo de ejecución
- 30. ¿Agregar patrones de URL mediante programación en Django?
Intresting, identificación como para ver si esto es posible a mí mismo. Sin embargo, curioso, ¿por qué no agregarlo web.config? como eso solo afecta al único sitio/aplicación, no todos IIS – Jammin