是否有可能获得用户的使用Silverlight的用户名当前登录? 你可以假设用户有Windows操作系统和Silverlight应用程序的Internet Explorer中承载。 充分利用与ASP.NET服务器端的身份不是一种选择,这Silverlight应用程序将在一个静态的HTML文件中主持。
Answer 1:
不幸的是,我不认为这是可能的。
虽然你说我们可以假设Windows操作系统/ IE,Silverlight的本身并不承担这一点,所以大多数正常的.NET机制,这通常会提供给我们获取当前登录的用户名没有在子集内存在提供给Silverlight应用程序框架:
即。
System.Net.CredentialCache.DefaultCredentials
System.Security.Principal.WindowsIdentity.GetCurrent().Name
Environment.UserName
都是一个Silverlight应用程序中不可用,而(说)一个Windows窗体应用程序,这些机制是可以使用。
我想这是有道理的,真的,因为没有保证Silverlight应用程序将是在Windows / IE平台上运行。
顺便说一句,这个问题也有人问在这里:
当前的Windows用户名和域名
并且该线程似乎证实有实现这一目标没有原生的方式。 该线程将继续提出“注入”当前ASP.NET用户从ASP.NET页面名称“托管” Silverlight应用程序。 到Silverlight应用程序本身之前,它在客户端的机器的上下文中运行。 当然,即使这样的作品,它只会让你无论从ASP.NET的形式或基于Windows的认证,而不是当前登录的客户机的用户的Windows用户名的ASP.NET用户名。
Answer 2:
要管理这种方式来获得。
1)创建asp.net web服务应用。
2)实现Web服务和方法从Silverlight的一个应用调用。
[WebMethod]
public string GetClientUserName()
{
return System.Web.HttpContext.Current.User.Identity.Name.ToString();
}
3)部署在Web服务器上此Web服务应用程序。 不允许匿名用户访问此。
4)该服务添加到Silverlight应用程序。 (添加服务引用)
5)现在,你可以调用这个方法,并从整个Silverlight应用程序获取用户名。
Answer 3:
高度投票这个问题的答案并没有帮助我。
使用ASP.NET Web服务,但是这个工作:
string userName =
System.ServiceModel.ServiceSecurityContext.Current.WindowsIdentity.Name;
而这篇博客是我设置了正确的路径上的一个:
http://rouslan.com/2009/03/12/20-steps-to-get-together-windows-authentication-silverlight-and-wcf-service/
ServiceReferences.ClientConfig需要这样的:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding ...>
<security mode="TransportCredentialOnly" />
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
而web.config中需要这样的:
<system.web>
<authentication mode="Windows" />
<identity impersonate="false" />
</system.web>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding ...>
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
这些都是我需要作出先前用于在IIS Web服务的匿名访问的,否则工作的Silverlight应用程序的唯一值得注意的变化。
Answer 4:
我想我会分享这个代码,似乎工作(因人而异)。 它是由CraigTP的回答和他联系,他提供了灵感。 我知道这并不直接回答关于在静态页面运行的一部分,但它似乎接受了APSX妥协的OP。
在我的ASPX页面承载的Silverlight:
<head>
<!-- ...snip... -->
<script runat="server" language="c#">
void Page_Load()
{
this.UsernameField.Value = User.Identity.Name;
}
</script>
</head>
<body>
<input type="hidden" ID="UsernameField" runat="server" />
<!-- ...snip... -->
</body>
在我的Silverlight C#代码:
private string GetCurrentUserName()
{
HtmlDocument doc = HtmlPage.Document;
if (doc == null)
{
return string.Empty;
}
HtmlElement elm = doc.GetElementById("UsernameField");
if (elm == null)
{
return string.Empty;
}
return elm.GetAttribute("value");
}
Answer 5:
Environment
.GetFolderPath(Environment.SpecialFolder.Personal)
.Split(new[] { '\\' }, StringSplitOptions.RemoveEmptyEntries)[2];
Answer 6:
根据这个帖子的不可能在javascript,所以我觉得你的运气了出来: http://bytes.com/topic/javascript/answers/616501-how-get-windows-username-using-javascripts
听起来好像有做它没有真正的方法。
Answer 7:
//使用System.IO.Path.DirectorySeparatorChar而//然后代码小牛答案的小的改进//
环境.GetFolderPath(Environment.SpecialFolder.Personal).Split(新[] {System.IO.Path.DirectorySeparatorChar},StringSplitOptions.RemoveEmptyEntries)[2];
Answer 8:
好了,这里是你如何能得到它wihtout WCF
http://www.codeproject.com/Articles/47520/Silverlight-Windows-User-Identity-Name