Session 如何在MVC5中从自定义路由库访问会话?
我正在尝试在ASP.NET MVC5中实现相对透明地加密ID的功能。我有一系列自定义HTML帮助程序,它们发出加密的ID,例如: html助手将密钥存储在会话范围中 然后,我有一个实现System.Web.Routing.RouteBase的类,GetRouteData方法应该用解密的id替换加密的id。如果我硬编码密钥,这是可行的,但是如果我将密钥存储在会话范围内并尝试访问它,会话总是空的Session 如何在MVC5中从自定义路由库访问会话?,session,asp.net-mvc-5,asp.net-mvc-routing,session-variables,Session,Asp.net Mvc 5,Asp.net Mvc Routing,Session Variables,我正在尝试在ASP.NET MVC5中实现相对透明地加密ID的功能。我有一系列自定义HTML帮助程序,它们发出加密的ID,例如: html助手将密钥存储在会话范围中 然后,我有一个实现System.Web.Routing.RouteBase的类,GetRouteData方法应该用解密的id替换加密的id。如果我硬编码密钥,这是可行的,但是如果我将密钥存储在会话范围内并尝试访问它,会话总是空的 public override RouteData GetRouteData(HttpContextB
public override RouteData GetRouteData(HttpContextBase httpContext){
//Session is always null
HttpSessionState session1 = System.Web.HttpContext.Current.Session;
...
return routeData;
}
有办法去参加会议吗?很明显,我对这里的生命周期并不了解 简而言之,你不能 在MVC中,
HttpContext.Session
在路由过程中还不可用-在应用程序的生命周期中还为时过早
MVC中会话状态可用的第一个点是在控制器创建阶段
有关MVC生命周期的更多信息,请参阅
如果将其与对齐,您可以看到路由处理程序在PostResolveRequestCache
事件中被调用。会话状态首先在AcquisiteRequestState
事件中填充,然后在BeginProcessRequest
事件中实例化控制器并执行操作
请务必注意。很抱歉造成混淆。我想我想说的是,不管我如何访问它——无论是通过httpContext.Session还是静态方式,Session总是空的。