我的网站使用带有服务ID的应用池来连接数据库。我希望能够在网页上填充一个文本框,该文本框显示其名称中的实际Windows日志,而不是与应用程序池关联的服务ID。我想要这个,所以我可以使用这些信息对gridview进行一些过滤,gridview根据用户名显示数据库中的一些数据。目前我尝试了几种不同的方式。
Environment.UserName
这将获取用于访问数据库的服务ID。
System.Security.Principal.WindowsIdentity.GetCurrent().Name;
这也获取了用于访问数据库的服务ID。
//Both of these return the same results described below.
HttpContext.Current.User.Identity.Name;
//and
System.Threading.Thread.CurrentPrincipal.Identity.Name;
这两个有点奇怪。当我通过vs2010进行调试时,他们获取了我的用户名,但是当我将文件复制到服务器时,这将运行并使用应用程序池让它没有任何帮助。我把它设置为在home.aspx页面的文本框中显示。
任何对此的帮助都会非常感激,因为我到处寻找,无法找到任何特定于我的情况的信息。
提前致谢!!
当前使用的实际代码:(从服务器运行时不返回任何内容)
if (!IsPostBack)
{
string filterName = HttpContext.Current.User.Identity.Name;
IDFilterTextBox.Text = filterName;
}
编辑:包括我尝试的新方法。
答案 0 :(得分:0)
我认为你所尝试的是不可能的。它在调试时看到你的原因是VS正在运行该站点,并在您的用户名下运行。
当您将应用程序部署到服务器时,在那里运行的代码无法访问用户的计算机 - 因此无法找到用户名。
您可以在用户的计算机上运行一些Javascript,但我不认为可以从中获取本地计算机用户名。
更新:好的,如果用户以某种方式登录到网站,那就不同了 - 我误解了这个问题。您可以尝试从以下网址获取:
System.Threading.Thread.CurrentPrincipal.Identity.Name
答案 1 :(得分:0)
所以这是一个简单的解决方案,使用我之前展示过的方法之一。
string UserName = System.Threading.Thread.CurrentPrincipal.Identity.Name;
棘手的部分是在IIS配置中。一旦我们发现匿名身份验证被禁用就会强制用户登录ID,以便它正常运行。