2011-01-13 4 views
8

PostAuthenticateRequest의 Global.asax 이벤트는 어떻게 사용할 수 있습니까? this tutorial을 따라 가고 있는데 PostAuthenticateRequest 이벤트를 사용해야한다고 언급합니다. Global.asax 이벤트를 추가하면 마크 업과 코드 숨김 파일이라는 두 개의 파일이 생성되었습니다. 여기에 파일Global.asax PostAuthenticateRequest 이벤트 바인딩은 어떻게 발생합니까?

using System; 
using System.Web; 
using System.Web.Security; 
using System.Web.SessionState; 

namespace authentication 
{ 
    public class Global : System.Web.HttpApplication 
    {  
     protected void Application_Start(object sender, EventArgs e) 
     {  
     } 

     protected void Session_Start(object sender, EventArgs e) 
     {  
     } 

     protected void Application_BeginRequest(object sender, EventArgs e) 
     { 
     } 

     protected void Application_AuthenticateRequest(object sender, EventArgs e) 
     {  
     } 

     protected void Application_Error(object sender, EventArgs e) 
     {  
     } 

     protected void Session_End(object sender, EventArgs e) 
     {  
     } 

     protected void Application_End(object sender, EventArgs e) 
     {  
     } 
    } 
} 

뒤에 코드의 내용은 지금은 그것은 성공적으로 호출되는

protected void Application_OnPostAuthenticateRequest(object sender, EventArgs e) 

를 입력 할 때입니다. 이제 PostAuthenticateRequest이 (가) Application_OnPostAuthenticateRequest 메서드에 바인딩 된 것을 알고 싶습니다. 방법을 다른 방법으로 변경하려면 어떻게해야합니까?

답변

14

는 매직 ..., Wireup자동 이벤트라는 메커니즘, 당신은 당신의 코드 숨김 및 방법에

Page_Load(object sender, EventArgs e) 
{ 
} 

을 쓸 수 같은 이유가 자동으로 페이지가로드 될 때 호출됩니다.

MSDN description for System.Web.Configuration.PagesSection.AutoEventWireup property

:

가져 ASP.NET 페이지에 대한 이벤트가 자동으로 이벤트 처리 함수에 연결되어 있는지 여부를 나타내는 값을 가져 오거나 설정합니다. AutoEventWireuptrue 경우

는 핸들러가 자동으로 자신의 이름과 서명을 기반으로 런타임에 이벤트에 바인딩됩니다. 각 이벤트에 대해 ASP.NET은 Page_Load() 또는 Page_Init()과 같은 Page_eventname() 패턴에 따라 명명 된 메서드를 검색합니다. ASP.NET은 먼저 일반적인 이벤트 처리기 서명 (즉, ObjectEventArgs 매개 변수를 지정하는 오버로드)을 찾습니다. 이 서명이있는 이벤트 처리기가 없으면 ASP.NET은 매개 변수가없는 오버로드를 찾습니다. this answer에서 자세한 내용. 당신이 그것을하고 싶었다 경우

명시 적으로 당신은 그것이있는 Intellisense에 표시되지 않았기 때문에 내가 시간을 낭비하고 내가 어떻게 든 이벤트에 가입해야 할 수도 있습니다 생각

public override void Init() 
{ 
    this.PostAuthenticateRequest += 
     new EventHandler(MyOnPostAuthenticateRequestHandler); 
    base.Init(); 
} 

private void MyOnPostAuthenticateRequestHandler(object sender, EventArgs e) 
{ 
} 
+0

대신 다음과 같은 작성합니다. 이벤트를 구현하는 방법을 묻는 게시물을 올리려고했지만 그때 시도해보고 오류가 있는지 살펴 보겠습니다. 그것은 일했다 :) 어쨌든 고마워 – Tux

+6

조심하십시오. Application_Start 또는 Session_Start는 Auto Event Wireup 메커니즘을 통해서만 처리 할 수 ​​있습니다. 구독 할 수있는 HttpApplication 클래스에는 명시 적 이벤트가 없습니다. –

+0

알려 주셔서 감사합니다. – Tux

관련 문제