【问题标题】:How to add User.Identity to session (or something) using MVC如何使用 MVC 将 User.Identity 添加到会话(或其他东西)
【发布时间】:2009-05-28 18:47:51
【问题描述】:

我正在通过以前的 webforms 应用程序将其转换为 MVC,并且有一个我似乎无法找到任何好的资源的大问题。我希望能够捕获用户的身份(在 web.config 中设置的 Windows 身份验证),但在 global.asax 中我似乎无法访问会话(但我可以获得身份信息)。或者当我在控制器的基类中工作时,我无法访问构造函数中的 httpContext(但我可以访问会话)

谁有这个问题的好解决方案?以前在网络表单中,我有一个母版页,它会根据您的 id/etc 进行一些验证并设置一些会话变量

【问题讨论】:

  • 你能发布一些代码给我们一些上下文吗?为什么在控制器构造函数中需要 HttpContext?你在 Global.asax 做什么?

标签: asp.net-mvc windows-authentication


【解决方案1】:

使用这行代码,您始终可以访问会话或任何其他基于 httpContext 的实体,只要它们已经被实例化即可

HttpContext.Current.Session
HttpContext.Current.Request
HttpContext.Current.Server
...etc

而且,除非您对身份进行修改并单独存储这些修改,否则您应该始终可以访问用户和身份信息,而无需将其保存到会话中。

HttpContext.Current.User.Identity

【讨论】:

  • 这就是我的想法,但是当我在 global.asax 的上下文中查看 httpcontext.current.session 时,它是空的 - 当我在基本控制器内部时,我的控制器上下文(和 httpcontext)是null 所以我无法获得身份(我是否遗漏了什么?)我需要在我的控制器内部做一些特殊的事情来正确地初始化基础吗?
  • 好吧,我不得不承认我对 MVC 框架的了解还不够,无法对此发表权威性的发言。但是从 Global asax 你绝对应该可以访问这些对象,只要它们已经被实例化。当您尝试时,您会针对哪些事件采取行动。例如,application_start 没有用户,默认情况下不会有会话。另一方面应该是 Session_start。
  • 这是我的问题,Session_Start 确实可以访问会话,但不能访问所需的身份值。 BeginRequest 可以访问身份,但 session 为 null ...我可以访问两者的任何方法吗?
  • 我觉得最终的解决方案很脏……在 authRequest 方法中,我捕获了身份并设置了一个私有变量 - 然后在 session_start 中我进行了身份验证工作……我需要把更多时间了解此解决方案(感谢您的帮助!)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-22
  • 1970-01-01
相关资源
最近更新 更多