2011-12-19 1 views
6

저는 도움을 구하고 저를 괴롭히기 시작했습니다.사용자 정의 httpHandlers에서 ASPX 페이지를 평가합니다.

도구 및 관련 정보를 저장하는 내부 도구 웹 사이트를 만들고 있습니다.

내 비전은 웹 주소 (Http : //website.local/Tool/ID) 입니다. 여기서 ID는 표시 할 도구의 ID입니다. 내 추론은 URL의 기능을 확장하여 다양한 다른 기능을 허용 할 수 있습니다.

현재 '도구'폴더에있는 URL을 가로채는 맞춤 httpHandler를 사용합니다.

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(); 
     } 
    } 
} 

는 기본적으로 나는 '도구'폴더 안에 내 고객 HttpHandler를 응답에 렌더링 할 (도구 \의 tool.aspx을) 페이지가 있습니다.

하지만이 방법은 작동하지 않습니다. (실패하지 않고 아무것도 표시하지 않습니다.) 원시 파일을 응답에 쓸 수는 있지만 분명히 목표는 아닙니다.

감사합니다,

올리버

+3

은 사용으로 간주 되세요 ASP.NET MVC? 네가하려는 일에 잘 어울리는 것 같아. – tvanfosson

+0

.net 3.5가 필요합니다. 좋은 예가 있습니까? –

+0

MVC2는 .NET 3.5에서 작동합니다. http://nerddinner.codeplex.com/ 예제는 표준적인 예입니다. 본질적으로 특정 툴 ID를 취하는 인덱스 액션을 가진 표준 TooController를 원할 것입니다. 추가 작업 또는 매개 변수 (또는 둘 모두)를 추가하여 기능을 확장 할 수 있습니다. – tvanfosson

답변

5

그래도, 당신은 당신의 을 IHttpHandler 파생 클래스에서 다음을 수행하려고 할 수 사용자 정의 방식을 사용하려면 :

 
     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); 
     }