Page.User.Identity和Request.LogonUserIdentity之间有什么区别(幕后)?不是类型,名称等方面的差异,而是它们在幕后实现的差异(即一个调用windows xxx api,另一个调用asp.net xxx api ......)。
答案 0 :(得分:19)
这取决于您用于对用户进行身份验证的机制,以及您用于模拟的设置。
例如,在VS开发服务器下,使用Forms身份验证,标准SQL成员资格提供程序和以下代码:
// m_LoggedIn is a Literal control on the page:
m_LoggedIn.Text = string.Format("<br />Page.User.Identity: {0} " +
"<br />Request.LogonUserIdentity: {1}",
Page.User.Identity.Name,
Request.LogonUserIdentity.Name);
我得到以下输出:
Page.User.Identity:zhaph
Request.LogonUserIdentity:[ComputerName] \ Ben
第一行(Page.User.Identity)是我登录到站点的表单身份验证帐户,第二行是请求运行的Windows身份 - 因为我没有启用模拟,这是我的Windows登录,因为这是运行Web服务器的帐户。
就API而言,HttpRequest.LogonUserIdentity正在调用WindowsIdentity类,它始终代表 Windows用户帐户,而Page.User正在创建实现IPrinciple的对象,它允许您使用许多不同的后备存储来表示用户 - 例如MembershipProvider提供的SQL数据库结构。