2012-06-17 34 views
2

我正在編寫多品牌應用程序(即,根據不同用戶的指示位置,它顯示不同的外觀)。在頁面視圖中設置會話變量

最終用戶來使用查詢字符串來設置客戶端ID的網站,例如

mysite?clientID={GUID} 

我所試圖做的是設置進行下列檢查

If Session["ClientID"] is null or empty 
    if querystring has ClientID 
     Set Session[ClientID] to QueryString[ClientID] 
    else if the user has their clientID set in the db 
     Set Session[ClientID] to DB Value 
    else 
     Use default ClientID 
End 

檢查我可以輕鬆解決的各種問題的代碼,我現在難以理解的是「推送」此代碼的位置,以便在每個頁面加載時進行檢查。更具體地說,如果我應該使用應用程序生命週期事件掛鉤,哪一個最適合這種情況,那麼我可以在呈現任何頁面之前訪問Membership對象,QueryString和Session對象。

回答

1

這是請求生命週期(等等):

  • 的Application_BeginRequest。
  • Application_AuthenticateRequest。
  • Application_AuthorizeRequest。
  • Application_PostAuthorizeRequest。
  • Application_ResolveRequestCache。
  • Application_AcquireRequestState。
  • Application_PreRequestHandlerExecute。
  • 您的頁面事件處理程序被執行
  • Application_PostRequestHandlerExecute。
  • Application_ReleaseRequestState。
  • Application_UpdateRequestCache。
  • Application_EndRequest。

有關詳細規範:http://msdn.microsoft.com/en-us/library/system.web.httpapplication.aspx

所以我認爲,事件最適合您的需求是:

Application_PostAuthorizeRequest

MSDN描述

發生,當用戶爲當前請求已被授權d。

來源:

http://msdn.microsoft.com/en-us/library/system.web.httpapplication.postauthorizerequest.aspx

1

您可以在global.asax中使用Application_BeginRequest事件,或者您可以將它放在MasterPage的代碼隱藏文件中(如果您有),或者在BasePage文件的代碼隱藏中(如果您的頁面從一個BasePage文件繼承)。

1

您的global.asax(在主目錄中)是最好的地方。

protected internal void Application_BeginRequest(object sender, EventArgs e) 
{ 
    // your code 
} 

讀更多在http://msdn.microsoft.com/en-us/library/2027ewzw.aspx

+0

我不相信的BeginRequest訪問用戶價值,所以我將無法訪問Membership.GetUser()命令不是麼? –

+0

對不起,我錯過了。給我一分鐘更新。 – 2012-06-17 21:12:19

+0

新政府和在希臘打斷互聯網。採取Jupaol的建議(與我的更新計劃相同)。 – 2012-06-17 21:29:22