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 在自定义授权属性中不可用

Roles.AddUsersToRoles() 要求 IDENTITY_INSERT 为 ON

在锁 c#2 中抛出异常

解析Java-throw抛出异常详细过程

如何在 _LoginPartial 的代码部分中获取用户角色?