Roles.GetRolesForUser 抛出异常对象引用未设置为对象的实例
Posted
技术标签:
【中文标题】Roles.GetRolesForUser 抛出异常对象引用未设置为对象的实例【英文标题】:Roles.GetRolesForUser throws exception Object reference not set to an instance of an object 【发布时间】:2013-11-17 09:13:54 【问题描述】:我有一个使用 Roles.GetRolesForUser
方法的 ASP.NET 应用程序。应用程序中的调用工作正常,但是当我在引用的库中使用相同的调用时,它会引发异常。异常消息是:
对象引用未设置为对象的实例
奇怪的是,当我检查角色时,它被实例化了。
我的代码如下所示:
var roles = Roles.GetRolesForUser(userName);
有什么建议吗?
【问题讨论】:
好吧,如果你在引用的库中调用 Roles.GetRolesForUser,你必须按如下方式使用它: var Roles = Roles.Provider.GetRolesForUser(userName);注意区别,在角色上显式调用提供者 将此添加为答案并将其标记为已接受,以便其他查找此内容的用户更容易。NullReferenceException
的几乎所有情况都是相同的。请参阅“What is a NullReferenceException in .NET?”获取一些提示。
@JohnSaunders 你是对的,但这是非常特殊的状态,这里的例外是 .NET Bug
【参考方案1】:
注意:根据 OP 本人的评论,这个答案解决了他的问题。
这是.NET Framework bug。 要解决此问题,请致电:
string[] roles = Roles.Provider.GetRolesForUser(userName);
这里是一个非常similar question。
【讨论】:
我的原因是 MSDTC 没有运行。即使 MSDTC 仍处于关闭状态,上述修复也使代码正常工作。【参考方案2】:在 MVC 5 中,您可以使用 GetRoles(Id)
方法获取用户角色。 但是,在使用GetRoles
之前,您必须先创建userManager
对象:
var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
var d = userManager.GetRoles(5);
【讨论】:
以上是关于Roles.GetRolesForUser 抛出异常对象引用未设置为对象的实例的主要内容,如果未能解决你的问题,请参考以下文章
Roles.GetRolesForUser();在 MVC 4 中似乎不起作用
Roles.GetRolesForUser 在自定义授权属性中不可用