【问题标题】:Difference between HttpContext.Current and Controller.Context in MVC ASP.NETMVC ASP.NET 中 HttpContext.Current 和 Controller.Context 的区别
【发布时间】:2009-04-24 11:04:00
【问题描述】:

我正在开发一个 MVC ASP .NET 应用程序。我对两者都比较陌生。

在控制器中,我试图获取当前登录用户,对此似乎有两种方法:

System.Web.HttpContext.Current.User.Identity.Name

或者

HttpContext.User.Identity.Name

这些有什么区别?据我所知,在 MVC 框架中,控制器将当前的 HttpContext 存储为属性,因此这些方法是相同的。对吗?

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    是的,它们通常是相同的。但是,如果您正在使用其他线程,则它们不会; System.Web.HttpContext.Current 是线程静态的。

    【讨论】:

    • 只是为了澄清您原本出色的答案:ThreadStatic 表示该值与线程相关联。也就是说,在任何其他线程中,您都无法访问 HttpContext.Current。
    • 另外,不要忘记控制器上还有一个 ControllerContext ,其中包含 MVC 特定信息,如 RouteData 集合。
    【解决方案2】:

    控制器提供的上下文(不是静态的 HttpContext.Current)是可模拟的。如果您对代码的单元测试感兴趣,那么创建模拟 ControllerContext 并将其设置在 Controller 上通常比通过 HttpContext.Current 容易得多。否则 ControllerContext.HttpContext 指向与 HttpContext.Current 相同的数据。

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      • 2020-11-25
      • 2012-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多