繁体   English   中英

HttpContext.Current.User和HttpContext.User有什么区别

[英]What is the difference between HttpContext.Current.User and HttpContext.User

我目前正在使用一些旧代码,其中在MVC控制器方法中使用HttpContext.Current.User属性对当前用户执行一些基本授权。 通过阅读文档,还有一个HttpContext.User属性,它们似乎都表明它们可以获取/设置当前用户。 我很好奇,如果它们在某些级别上是可互换的并且相同,或者两者之间存在关键差异,这将在授权甚至识别Web应用程序的当前用户方面引起意外的问题。

您不能直接引用HttpContext.User ,除非可能在控制器内部。 UserHttpContext类的属性。 您可以执行以下操作:

HttpContext context = HttpContext.Current;
IPrincipal user = context.User;

也就是说,您可以通过HttpContext类的实例引用该属性。

基础Controller类具有一个名为HttpContext的属性。 在控制器内部,如果引用HttpContext.User ,则引用的是base.HttpContext.User ,它通常(总是(总是)?)与HttpContext.Current.User相同,只是因为base.HttpContext通常(也许总是? )与HttpContext.Current相同。

文档类型对此进行了解释(重点是增加的,尽管这是指Web表单,但我相信MVC的原理是相同的):

由于ASP.NET页包含对System.Web命名空间的默认引用(包含HttpContext类),因此您可以在.aspx页上引用HttpContext的成员,而无需使用对HttpContext的完全限定的类引用。 例如,您可以使用User.Identity.Name获取代表当前进程正在运行的用户的名称。

但是,如果要使用ASP.NET代码隐藏模块中的IPrincipal成员,则必须在模块中包括对System.Web命名空间的引用,以及对当前活动的请求/响应上下文和您要使用的System.Web中的类

例如,在代码隐藏页面中,您必须指定标准名称HttpContext.Current.User.Identity.Name。

HttpContext.Current和HttpContext都与它为当前HTTP请求返回的httpContext对象相同。
但是后一个是控制器对象的属性,因此仅在控制器中可用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM