我试图在Silver light应用程序中获取Window用户名。我使用以下代码从按钮点击事件的银色灯页打开aspx页面:
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}
private void btntest_Click(object sender, RoutedEventArgs e)
{
HtmlPage.Window.Navigate(new Uri("WebForm1.aspx", UriKind.Relative));
}
}
现在在WebForm1.aspx上,我试图使用下面的代码获取Window Username:
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = System.Environment.UserName;
}
}
当我在本地机器上运行我的silverlight项目时,它在Label1中给出了正确的Window用户名,它工作正常。但是,当我在IIS中部署我的应用程序并检查然后它显示" DefaultPool"在我的Label1。
任何人都可以帮助解决这个问题吗?
在ISS中我是否有任何设置来获取Window UserName?
谢谢, 亚太区首席技术官Matt
答案 0 :(得分:0)
始终在IIS中测试您的代码,即使在本地计算机上也是如此。
就像昨天的问题一样,代码在服务器上运行。因此,如果您在Visual Studio而不是IIS中运行它,它将在您的测试框中返回您的用户名,并且它将返回IIS用于托管您的页面或服务的用户的名称。
为什么要获取用户名?无论在什么技术背景下,获取客户端的用户凭证都不是Web应用程序的业务。
如果要在Web应用程序中获取用户凭据,请询问用户。如果您认为自己处于使用户想要自动发送数据的信任级别,请创建一个真实的应用程序。这比网络应用程序要麻烦得多,因为您必须支持所有类型的设备,并且必须应对我们每天在浏览器中打开的应用程序正常的各种限制。
答案 1 :(得分:0)
您没有获得访问您的应用程序的用户的用户名的原因是因为您正在使用一种方法来检索当前登录用户的上下文,对于Web应用程序,您正在检索用户上下文应用程序池。
system.environment.username“获取当前登录Windows操作系统的用户的用户名。”
http://msdn.microsoft.com/en-us/library/system.environment.username(v=vs.110).aspx
如果您希望在不提示用户提供详细信息的情况下进行NTLM(Windows)身份验证,您可能需要研究混合模式身份验证以允许表单和Windows身份验证以及单点登录。