廣泛的研究之後,我終於發現了問題。我能夠在Web應用程序中重現此問題。顯然,你不能合併ASP.NET身份與簡單成員,就像你用GetRolesForUser
方法做的那樣。 Roles
對象默認設置爲簡單成員身份使用默認提供程序,但它看起來像您使用的ASP.NET身份不是簡單成員資格。直到我想知道自己爲什麼它不工作時,我甚至沒有注意到這種差異。
之所以得到string[0]
是因爲GetRolesForUser
對數據庫中不存在的表執行了sql查詢。
爲什麼IsUserInRole
工作的原因是或多或少它甚至不使用默認的供應商,以檢查它使用的
If CacheRolesInCookie is true, then roleName may be checked against the roles cache rather than the specified role provider.
所以,從技術上說去,是由默認的提供上市,並返回string[0]
一個的connectionString因爲你使用connectionString在數據庫中沒有數據。將您的當前數據庫的供應商將沒有幫助,因爲簡單會員數據庫架構是從ASP.NET身份
話雖這麼說不同,你應該得到的角色由用戶名是這樣的:
簡單解決方案:
public List<string> GetRoles(string UserName)
{ List<string> roles = new List<string>();
if (!string.IsNullOrWhiteSpace(UserName))
{
ApplicationUser user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
var account = new AccountController();
roles = account.UserManager.GetRoles(user.Id);
}
return roles;
}
更新
Ë xtended解決方案:
你可以在你的情況下延長ASP.NET身份角色
http://www.codeproject.com/Articles/799571/ASP-NET-MVC-Extending-ASP-NET-Identity-Roles
你改變之前,這種佈局的作用正在執行?如果是這樣,您可能會遇到與用於GetRolesForUser的Cookie角色緩存有關的問題。請參閱CacheRolesInCookie部分:https://msdn.microsoft.com/en-us/library/8ak75t41(v=vs.110).aspx –
如果您這樣做了'GetRolesForUser(username here )'? – imGreg
@ stephen.vakil不,我不改變角色。即使我做了私人窗口,也保持同樣的狀態。 – SMUsamaShah