2011-12-19 11 views
6

He buscado ayuda en todas partes y está empezando a molestarme.Evaluación de páginas ASPX de httpHandlers personalizados

Estoy creando un sitio web de herramientas internas que almacena herramientas y su información relacionada.

Mi visión es tener una dirección web (Http: //website.local/Tool/ID) Donde ID es el ID de la herramienta que queremos que se muestre. Mi razonamiento es que puedo extender la funcionalidad de la URL para permitir otras funciones.

Actualmente utilizo un httpHandler personalizado que intercepta cualquier URL que esté en la carpeta 'Herramienta'.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace Tooling_Website.Tool 
{ 
    public class ToolHandler : IHttpHandler 
    { 
     public bool IsReusable 
     { 
      get { return false; } 
     } 


     public void ProcessRequest(HttpContext context) 
     { 
      //The URL that would hit this handler is: http://{website}/Tool/{AN ID eg: http://{website}/Tool/PDINJ000500} 
      //The idea is that what would be the page name is now the ID of the tool. 
      //tool is an ASPX Page. 
      tool tl = new tool(); 
      System.Web.UI.HtmlTextWriter htr = new System.Web.UI.HtmlTextWriter(context.Response.Output); 
      tl.RenderControl(htr); 
      htr.Close(); 
     } 
    } 
} 

Básicamente tengo una página dentro de la carpeta 'Tool' (Herramienta \ tool.aspx), que yo quiero que mi cliente HTTPHandler a Render en la respuesta.

Pero este método no funciona (no falla, simplemente no muestra nada) Puedo escribir el archivo sin procesar a la respuesta, pero obviamente ese no es mi objetivo.

Gracias,

Oliver

+3

Ha considerado el uso ASP.NET MVC? Parece que sería una buena opción para lo que estás tratando de hacer. – tvanfosson

+0

Necesita ser para .net 3.5, ¿tiene un buen ejemplo? –

+0

MVC2 funciona con .NET 3.5. El ejemplo http://nerddinner.codeplex.com/ es el ejemplo canónico. Básicamente, desearía un TooController estándar con una acción de índice que tome una identificación de herramienta específica. Puede agregar acciones o parámetros adicionales (o ambos) para ampliar la funcionalidad. – tvanfosson

Respuesta

5

Si aún desea utilizar su enfoque personalizado, se puede tratar de hacer lo siguiente en su IHttpHandler clase derivada:

 
     public void ProcessRequest(HttpContext context) 
     { 
      //NOTE: here you should implement your custom mapping 
      string yourAspxFile = "~/Default.aspx"; 
      //Get compiled type by path 
      Type type = BuildManager.GetCompiledType(yourAspxFile); 
      //create instance of the page 
      Page page = (Page) Activator.CreateInstance(type); 
      //process request 
      page.ProcessRequest(context); 
     } 
Cuestiones relacionadas