是否有可能使用Silverlight獲取當前登錄用戶的用戶名?您可以假定用戶具有Windows操作系統,並且Silverlight應用程序託管在Internet Explorer中。使用ASP.NET從服務器端獲取身份不是一種選擇,這個Silverlight應用程序將託管在靜態HTML文件上。在Silverlight中獲取當前Windows用戶名
回答
不幸的是,我不認爲這是可能的。
雖然你說我們可以承擔Windows操作系統/ IE瀏覽器,但Silverlight本身肯定不會假設這一點,所以大多數通常可用於獲取當前登錄用戶名的普通.NET機制都不會存在於Silverlight應用程序可用框架的子集內:
ie。
System.Net.CredentialCache.DefaultCredentials
System.Security.Principal.WindowsIdentity.GetCurrent().Name
Environment.UserName
在Silverlight應用程序中都不可用,而在Windows窗體應用程序中(例如),這些機制中的每一個都可以使用。
我想這是有道理的,因爲不能保證Silverlight應用程序將在Windows/IE平臺上運行。
順便說一句,這個問題也有人問在這裏:
Current Windows Username and Domain
和線程似乎證實有實現這一目標沒有原生的方式。然後線程繼續建議從ASP.NET頁面「託管」Silverlight應用程序中「注入」當前的ASP.NET用戶名。在Silverlight應用程序本身在客戶端機器的上下文中運行之前進入Silverlight應用程序本身。當然,即使這樣做,它也只會從ASP.NET的窗體或基於Windows的身份驗證和而不是客戶端計算機的當前登錄用戶的Windows用戶名中爲您提供ASP.NET用戶名。
根據這個帖子的不可能在javascript,所以我覺得你的運氣了出來: http://bytes.com/topic/javascript/answers/616501-how-get-windows-username-using-javascripts
聽起來像有做它沒有真正的方法。
實際上,我們最初選擇了JavaScript解決方案,並且它工作正常。但它要求用戶接受一堆遠非理想的安全對話框。 – huseyint 2009-07-24 15:31:37
你可以設法通過這種方式得到。
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應用程序獲取用戶名。
我想我會分享這個代碼似乎工作(YMMV)。它受CraigTP的回答以及他提供的鏈接的啓發。我知道這並不直接回答關於在靜態網頁中運行的部分,但似乎OP接受了APSX的妥協。
在我的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");
}
儘管看起來這樣會起作用,但您不能依賴此機制來實現安全性,例如SSO身份驗證。 – Thorarin 2010-11-04 12:05:22
@Thorarin:這對於Windows/Negotiate或NTLM(我認爲是SSO)身份驗證或甚至Basic都可以正常工作。我們在這裏討論的是將用戶名返回給Silverlight客戶端。 在Silverlight中使用這些信息有什麼不確定。任何類型的認證/授權工作通常在服務器上完成 - 尤其是當SL如此沙箱化時。但是,我不會告訴OP不要這樣做,因爲我們不知道整個故事。另外,OP似乎正在尋找創造性的黑客。 – Aardvark 2012-10-18 13:08:13
高度投票這個問題的答案並沒有幫助我。
使用ASP.NET Web服務,但是這個工作:
string userName =
System.ServiceModel.ServiceSecurityContext.Current.WindowsIdentity.Name;
而這篇博客是我設置了正確的路徑上的一個:
ServiceReferences.ClientConfig需要這個:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding ...>
<security mode="TransportCredentialOnly" />
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
而web.config需要s此:
<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應用程序的唯一值得注意的變化。
Environment
.GetFolderPath(Environment.SpecialFolder.Personal)
.Split(new[] { '\\' }, StringSplitOptions.RemoveEmptyEntries)[2];
//使用System.IO.Path.DirectorySeparatorChar而// //然後
環境 .GetFolderPath(Environment.SpecialFolder.Personal) .Split(新代碼小牛答案的小的改進[] {System.IO.Path.DirectorySeparatorChar},StringSplitOptions.RemoveEmptyEntries)[2];
好,這裏是你如何能得到它wihtout WCF
http://www.codeproject.com/Articles/47520/Silverlight-Windows-User-Identity-Name
- 1. 如何在silverlight中獲取Windows的當前用戶名?
- 2. Silverlight 4中獲取當前用戶
- 3. 獲取當前用戶名
- 4. 獲取當前用戶名
- 5. 如何在Windows中獲取當前登錄用戶的域名?
- 6. 使用php獲取當前用戶的Windows用戶名?
- 7. 如何獲取當前Windows登錄用戶的用戶名?
- 8. 在Windows上使用C++獲取當前用戶名
- 9. SharePoint獲取當前用戶帳戶名?
- 10. 獲取當前客戶端Silverlight版本?
- 11. 獲取當前Windows用戶VB.net
- 12. 獲取當前登錄的Windows用戶?
- 13. 使用WMI獲取當前用戶名
- 14. C的用戶名在Linux - 獲取當前用戶名
- 15. 獲取當前用戶名冒充
- 16. pysvn:獲取當前登錄用戶名
- 17. 獲取當前用戶名的AutoIt
- 18. 獲取當前用戶的名字
- 19. Windows身份驗證 - 獲取當前用戶名
- 20. 獲取當前用戶名,即在SharePoint 2010門戶中登錄
- 21. 在ASP.NET中提取當前用戶名
- 22. 獲取windows XP,windows 7當前登錄VC中的用戶名稱
- 23. 獲取用戶名爲當前用戶名的行的總和
- 24. 如何在Windows中獲取當前用戶的主目錄
- 25. 如何在Access VBA中獲取當前登錄的Windows用戶?
- 26. 如何在asp.net中獲取當前的windows用戶?
- 27. 如何在Windows中獲取當前用戶?
- 28. 在Model Serializer中獲取當前用戶
- 29. 在CloudKit中獲取當前用戶ID?
- 30. 在MS Project中獲取當前用戶
尼斯的答案!如果不存在任何創造性答案(hack?),我可能會(並且不幸地)將此答案標記爲已接受 – huseyint 2009-07-24 11:29:08