- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
razor 布局 View 中的
@Roles.GetRolesForUser()
未返回角色。 @Roles.GetRolesForUser().Count()
为 0。
虽然 @Roles.IsUserInRole('name_of_logged_in_role')
在同一位置的同一 View 中返回 true
。
Razor View :
<p>
@User.Identity.Name //Output: MyName
@Roles.GetRolesForUser().Count() //Output: 0
@Roles.IsUserInRole("Radiologist") //Output: True
</p>
更新
@Roles.GetRolesForUser(User.Identity.Name).Length //Output: 0
@Roles.GetRolesForUser(User.Identity.GetUserName()).Length //Output: 0
最佳答案
经过广泛的研究,我终于找到了问题所在。我能够在 Web 应用程序中重现该问题。显然,您不能将 ASP.NET Identity 与 Simple Membership 结合使用,就像您使用 GetRolesForUser
方法那样。 Roles
对象默认设置为使用默认提供程序的 Simple Membership,但看起来您使用的是 ASP.NET Identity 而不是 简单的成员(member)资格。我什至没有注意到差异,直到我想知道为什么它不起作用。
你得到 string[0]
的原因是因为 GetRolesForUser
对数据库中不存在的表执行了 sql 查询。IsUserInRole
工作的原因或多或少是因为它甚至没有使用默认提供程序来检查它是否使用了 CacheRolesInCookie
If CacheRolesInCookie is true, then roleName may be checked against the roles cache rather than the specified role provider.
因此,从技术上讲,它转到默认提供程序列出的 connectionString 并返回 string[0]
,因为数据库中没有包含该 connectionString 的数据。将您当前的数据库添加到提供程序也无济于事,因为 Simple Membership 数据库架构不同于 ASP.NET Identity
话虽如此,您应该像这样通过用户名获取角色:
简单的解决方案:
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;
}
已更新
扩展解决方案:
您可以在您的上下文中扩展 ASP.NET Identity 角色
http://www.codeproject.com/Articles/799571/ASP-NET-MVC-Extending-ASP-NET-Identity-Roles
关于asp.net - 布局 View 中的 Roles.GetRolesForUser() 不返回角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30535820/
当我实现 RoleProvider 类并调用 Roles.IsUserInRole(string username, string roleName) 时,代码执行首先转到方法“GetRolesFor
我有一个使用 Roles.GetRolesForUser 方法的 ASP.NET 应用程序。调用在应用程序中工作正常,但是当我在引用的库中使用相同的调用时,它会引发异常。异常信息是: Object r
设想: WCF 服务使用 SqlRoleProvider 与 Sql Server 2012 数据库服务器进行身份验证。 WCF 托管在 IIS7 网络服务器上。 请看这个错误: System.Nul
razor 布局 View 中的 @Roles.GetRolesForUser() 未返回角色。 @Roles.GetRolesForUser().Count() 为 0。 虽然 @Roles.IsU
我是一名优秀的程序员,十分优秀!