【问题标题】:AddToRole() method doesn't result in db entry in ASP.NET IdentityAddToRole() 方法不会导致 ASP.NET Identity 中的 db 条目
【发布时间】:2014-08-12 16:37:29
【问题描述】:

我在我的 ASP.NET MVC 应用程序中使用 ASP.NET Identity。将用户添加到角色时出现我的问题。没有任何例外,但是由于 um.AddToRole() 没有将 db 条目添加到 AspNetUserRoles 表中。我的操作方法是这样的:

    public ActionResult GrantAdmin(string id)
    {
        ApplicationUser user = um.FindById(id);
        if (!rm.RoleExists("admin")) 
        {
            rm.Create(new IdentityRole("admin"));
        }
        um.AddToRole(user.Id, "admin");
        return View((object)user.UserName);
    }

um 是 UserManager 类的对象:

private UserManager<ApplicationUser> um = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));

出现这种应用程序行为的原因是什么?有什么想法吗?

===编辑=== 这是我的 DbContext:

public ApplicationDbContext()
        : base("DefaultConnection")
    {
    }

Web.config 中的默认连接:

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-RecommendationPlatform-20140404055015.mdf;Initial Catalog=aspnet-RecommendationPlatform-20140404055015;Integrated Security=True" providerName="System.Data.SqlClient" />

【问题讨论】:

  • 这听起来像是一个奇怪的问题 - 尽管自运行此程序以来您是否刷新了 SQL Management Studio 数据库列表?它有可能正在查看与您想要的数据库不同的数据库,如果它不存在,它会创建它并在该数据库中添加用户/角色。我只提到这一点,因为它也发生在我身上。
  • 是的,我考虑到了这种可能性。但我根本看不到它。没有例外的条目表明正在其他地方进行条目......但我不知道它为什么会这样,以及如何明确指出正确的数据库@Darren。你是怎么解决这个问题的?
  • 您能在您创建 DbContext 的位置显示代码吗?您可以在此处明确设置要使用的连接字符串的名称。
  • @Darren 它显示在我的代码的第二部分中。当我创建 UserManager 对象 (um) - 参数 od UserStore 是 new ApplicationDbContext()。
  • AddToRole 返回一个结果 IIRC。你能检查结果对象,也许答案就在那里。

标签: c# asp.net asp.net-mvc roles asp.net-identity


【解决方案1】:

在使用 ASP.NET Identity 时,重要的是要记住许多操作会返回一个结果对象,其中存储了最终的错误。没有例外。因此,应在每次操作后检查结果对象是否成功。这不仅适用于角色,而且适用于将数据保存到数据库的大多数方法。即使它有效,您仍然应该测试是否成功,如果结果不成功,则最终抛出异常。

根据您的情况,问题是用户名无效。

【讨论】:

  • 此外,错误以字符串形式返回。如果您同意它们应该是枚举,以便更容易了解所有可能的错误并更容易处理它们,请支持我在 codeplex 上发布的问题 - aspnetidentity.codeplex.com/workitem/2222
猜你喜欢
  • 2020-07-31
  • 1970-01-01
  • 2019-11-28
  • 2014-09-07
  • 2011-06-06
  • 1970-01-01
  • 2017-01-12
  • 2019-06-25
  • 1970-01-01
相关资源
最近更新 更多