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 对象。

4

3 回答 3

1

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

于 2012-06-17T20:59:58.520 回答
1

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

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

在http://msdn.microsoft.com/en-us/library/2027ewzw.aspx阅读更多内容

于 2012-06-17T21:00:17.677 回答
1

这是请求生命周期(等等):

  • 应用程序_开始请求。
  • Application_AuthenticateRequest。
  • 应用程序_授权请求。
  • Application_PostAuthorizeRequest。
  • Application_ResolveRequestCache。
  • Application_AcquireRequestState。
  • Application_PreRequestHandler 执行。
  • 您的页面事件处理程序已执行
  • Application_PostRequestHandler 执行。
  • Application_ReleaseRequestState。
  • Application_UpdateRequestCache。
  • 应用程序_结束请求。

有关详细规范: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

于 2012-06-17T21:19:10.603 回答