2014-03-26 2 views
0

aspx 페이지의 HttpHandler를 얻는 방법은 무엇입니까? 내가 new Test()를 호출하는 경우 예를 들어aspx 페이지의 HttpHandler를 얻는 방법은 무엇입니까?

, 나는 그것은 하나의 내가 을 탐색하는 동안 액세스 할 수있는 HttpApplication.Context.Handler에서 얻을 HttpHandler를의 동일한 종류를 반환하지 않습니다 public class Test : System.Web.UI.Page [...]
뒤에 코드 에서 Test.aspx이 test.aspx
.

FYI (그리고 definitivelly하지 질문) :. 나는 Server.Transfer(NewPageHandler)

답변

1

당신은 당신의 페이지

System.Web.UI.PageParser 
.GetCompiledPageInstance("~/YourPage.aspx", 
         HttpApplication.Server.MapPath("~/YourPage.aspx") 
         , HttpApplication.Context); 
+0

@Serge의 컴파일 된 인스턴스를 얻을 수 있습니다, 당신은 더 설명해주십시오 수 있습니다. 잘 모르겠어요 –

+0

잘 작동합니다. 나는 당신의 솔루션이 Luaan의 솔루션보다 더 낫다. 왜냐하면 당신의 솔루션은 URL을 알 필요가 없기 때문이다. – Serge

+0

@ Serge, 당신은 환영합니다 :) –

1

기본적으로 사용하여 복잡한 일을 할 것이기 때문에, 귀하의 경우 Test에 실제 Test.aspx 클래스의 부모 (즉, ASPX 파일입니다 필요 Test을 상속받은 클래스로 컴파일됩니다. 그들은 거의 동등한있어,

BuildManager.CreateInstanceFromVirtualPath("~/Test.aspx", typeof(Test)); 

또는 무랄리 Murugesan 제안대로 PageParser.GetCompiledPageInstance를 사용할 수 있습니다

Test.aspx 인스턴스를 얻으려면 하나의 옵션은 직접 컴파일러를 사용하는 것입니다.

실제로 지원되지는 않습니다 ("이 API는 .NET Framework 인프라를 지원하며 사용자 코드에서 직접 사용할 수 없습니다.")하지만 대부분 작동합니다.

class LuPageHandlerFactory : PageHandlerFactory 
{ 
    public static LuPageHandlerFactory Instance = new LuPageHandlerFactory(); 
    private LuPageHandlerFactory() { } 
} 

// Which lets me call this: 
var handler = 
    LuPageHandlerFactory.Instance.GetHandler 
    (
     HttpContext.Current, null, "~/Test.aspx", null 
    ) as Test; 

클리너 접근 방식은 HttpContext.Current.RewritePath("~/Test.aspx");을 사용하고 HttpContext.Current.Items에 데이터를 전달하는 것입니다 : 사실은 훨씬 더 안정되어 내 코드에서 기본 PageHandlerFactory로 전환했습니다.

내 엔진은 실제로 내가 대체로 언급 한 마지막 접근 방식을 사용합니다. LuPageHandlerFactory 접근 방식이 SecurityException을 throw하면 나는 RewritePath으로 폴백합니다. HttpCompileException도 처리해야합니다.

관련 문제