【发布时间】:2008-11-09 10:57:39
【问题描述】:
在调试模式下运行时,我收到“拒绝访问路径”错误消息。我尝试向 {MACHINENAME}\ASPNET 和 NETWORK SERVICE 授予权限,但这没有任何区别。我也有尝试使用管理员帐户,这也没有任何区别。那么我如何确定正在使用哪个帐户?
【问题讨论】:
在调试模式下运行时,我收到“拒绝访问路径”错误消息。我尝试向 {MACHINENAME}\ASPNET 和 NETWORK SERVICE 授予权限,但这没有任何区别。我也有尝试使用管理员帐户,这也没有任何区别。那么我如何确定正在使用哪个帐户?
【问题讨论】:
要在任何给定时间找出您的应用在哪个 NT 帐户下运行,请执行以下操作(在 VB.NET 中):
Dim User = System.Security.Principal.WindowsIdentity.GetCurrent.User
Dim UserName = User.Translate(GetType(System.Security.Principal.NTAccount)).Value
使用 ASP.NET 时,此帐户将与您使用 IIS 管理器配置的应用程序池的标识相匹配。请注意,匿名 IIS 用户与 ASP.NET 请求的关系不大。
【讨论】:
vb.net 答案的 C# 代码
var user = System.Security.Principal.WindowsIdentity.GetCurrent().User;
var userName = user.Translate(typeof (System.Security.Principal.NTAccount));
【讨论】:
您可以使用以下代码:
C#
Response.Write("Windows Account which runs ASP.NET is: "
+ Environment.Username);
VB.NET
Response.Write("Windows Account which runs ASP.NET is: " _
& Environment.Username)
如果您在 PC (localhost) 上的 Visual Studio 中运行您的应用程序,您将获得您的用户名。如果您在 IIS 上部署 ASP.NET Web 应用程序,您可能会获得 NETWORK SERVICE 帐户,因为这是运行 IIS 6.0 的默认用户(Windows Server 2000 的 IIS 5.0 上的 ASPNET)。
Environment.UserName 返回线程当前登录的用户。 Page.User 返回 ASP.NET 通过身份验证验证的名称,并且此用户在大多数情况下独立于运行当前线程的 Windows 登录。对于匿名请求,Page.User 为空白,而 Environment.User 将为 NETWORK SERVICE。
正如mdb 在对此答案的评论中正确指出的那样,Environment.Username 将简单地返回 USERNAME 环境变量,该变量在进程创建时设置,在模拟等情况下不会更新。
【讨论】:
strint t=System.Web.Security.Membership.GetUser().UserName.ToString();
【讨论】: