我使用簡單的.NET身份驗證用戶登錄到達網絡:Membership.GetUser()。UserName; (.NET 4,MVC 3)
if (Membership.ValidateUser(user, passwd))
工作正常。熱議的是高跟鞋,我試圖獲取用戶名:
Membership.GetUser().UserName
有時這會返回一個無效的對象。有時不。 我似乎無法檢測到哪個模式。
例如,用戶使用「root」/「密碼」在系統中以有效角色登錄。 ValidateUser()調用成功,但是Membership.GetUser()。UserName返回無效的對象。 2秒鐘後,再次做同樣的事情,並驗證和GetUser()成功。
什麼想法?
..編輯1 .. 以下是我使用的用戶名:
Roles.GetRolesForUser(Membership.GetUser().UserName);
,當我在System.Environment.UserName互換,角色列表回來空。
如果我保持原樣,並且使用'true'作爲我的第二個參數來設置auth cookie,它可以正常工作。
FormsAuthentication.SetAuthCookie(user, true);
如果我使用HttpContext.Current.User.Identity.Name,角色列表是精細設置爲true或false的AUTH的cookie。
現在,我理解有關性能的問題。這對我很重要。但我也需要確保應用程序的功能正確。
「無效對象」是什麼意思?空值? –
如果您只是想獲取用戶名,您可能需要考慮抓取System.Environment.UserName。我不是100%肯定的,但我認爲這個屬性並不需要去Getuser()所在的數據庫。如果我是正確的,這將意味着更好的性能和更少的開銷。 – David
哦。好吧,會發生什麼是GetUser()返回的不是一個真實的對象,然後.GetName從該對象拋出'NullReferenceException'異常。我也會看看System.Environment.UserName。 – horace