我的问题与StackOverflow上的问题765054基本相同。我只是再问它,因为接受的答案是不正确的(你无法访问Application_BeginRequest中的会话对象)。
我们的用例是我们希望将经过身份验证的用户的用户对象存储在会话中。因此,在后续请求中,我们可以根据会话中的用户对象正确设置IPrincipal和IIdentity。
答案 0 :(得分:4)
显然 AcquireRequestState 是HttpContext.Current.Session不为null的最早事件。我只是按顺序连接所有这些并进行测试。我更喜欢使用PreRequestHandlerExecute,它发生在我的控制器上的构造函数被调用之前。
如果您希望将代码放入Global.asax或从Global.asax引用,则这是相关的。有关应用程序生命周期中事件的顺序列表,请参阅此页面:http://msdn.microsoft.com/en-us/library/ms178473%28v=vs.100%29.aspx
答案 1 :(得分:3)
我使用基本控制器执行类似操作并重写OnActionExecuting。这是否是最早可以完成的,我不知道,但我知道它会在你的动作执行之前发生(因此在渲染视图之前)。或者,您可能希望拥有一个可以执行所需操作的自定义授权属性。这可能是确保在其他属性运行之前完成的唯一方法。