![](/img/trans.png)
[英]Difference between HttpContext.Current.User and this.User.Identity
[英]What is the difference between HttpContext.Current.User and HttpContext.User
我目前正在使用一些旧代码,其中在MVC控制器方法中使用HttpContext.Current.User
属性对当前用户执行一些基本授权。 通过阅读文档,还有一个HttpContext.User
属性,它们似乎都表明它们可以获取/设置当前用户。 我很好奇,如果它们在某些级别上是可互换的并且相同,或者两者之间存在关键差异,这将在授权甚至识别Web应用程序的当前用户方面引起意外的问题。
您不能直接引用HttpContext.User
,除非可能在控制器内部。 User
是HttpContext
类的属性。 您可以执行以下操作:
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.