在页面视图上设置会话变量

时间:2012-06-17 20:42:31

标签: c# asp.net asp.net-mvc-3 page-lifecycle

我正在编写一个多品牌的应用程序(即根据它们的定位,它显示不同用户的不同外观)。

最终用户使用查询字符串来设置客户端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对象。

3 个答案:

答案 0 :(得分:1)

您可以在global.asax中使用Application_BeginRequest事件,或者您可以将它放在MasterPage的代码隐藏中(如果您有),或者如果您的页面继承,则将其放在BasePage文件的代码隐藏中从一个。

答案 1 :(得分:1)

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

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

http://msdn.microsoft.com/en-us/library/2027ewzw.aspx

了解详情

答案 2 :(得分: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说明

  

在授权当前请求的用户时发生。

源:

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