asp.net-mvc - 如何检查 Controller 中是否已经存在用户?

标签 asp.net-mvc asp.net-identity

这是我的注册方法。我将注册方法更改为管理工具。管理工具在没有 if 语句的情况下也能正常工作。但是,它不喜欢我寻找现有用户的方式。

    // POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{    
    if (ModelState.IsValid)
    {
        if(_context.Users.Contains(model.UserName))//Errors out here
        {
            var user = new ApplicationUser { UserName = model.UserName};
            user.UserName = model.UserName;
            var result = await UserManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                await this.UserManager.AddToRoleAsync(user.Id, model.Name);
                return RedirectToAction("Index","User");
            }
        AddErrors(result);
        }
    }
    return View(model);
}

最佳答案

改为尝试:

if(!_context.Users.Any(x => x.UserName == model.UserName))

假设 Users 中的用户名为 UserName.. 如果条件存在,则 Any 返回 true 或 false。

无论如何,我认为您的逻辑是倒退的。我想你想创建一个用户,如果他们不存在,这就是我上面所做的。

然而,为此使用 UserManager 可能更好。

var user = await UserManager.FindByNameAsync(model.UserName);
if (user != null)
    ...

之所以最好对所有事情都使用 UserManager,是因为您没有创建多个相互冲突的 DbContext(UserManager 有一个,而您创建了一个单独的 DbContext)。这可能会导致问题,即您使用一个上下文创建的对象试图在另一个上下文中使用,这会导致各种令人头疼的问题。

然而,最有效的方法是简单地尝试创建用户,然后检查结果是成功还是失败。

var result = await UserManager.CreateAsync(...)
if (result.Succeeded)
    ....

您已经在上面这样做了,那么首先进行额外检查有什么意义呢?

关于asp.net-mvc - 如何检查 Controller 中是否已经存在用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38131437/

相关文章:

asp.net - 如何撤销/无效/取消旧的电子邮件确认 token (身份)

asp.net-mvc - Selenium 测试自动化

c# - 加密的字符串在结果中有一个斜杠(/),这会导致 URL 出现问题

c# - session 超时时如何在登录页面显示错误消息

c# - 覆盖 FindByEmail 以按租户查找

asp.net-web-api - Web API 2 OWIN Bearer token 身份验证 - AccessTokenFormat null?

asp.net - 身份和自定义表之间的多对多关系。 EF7-代码优先

javascript - 将 Highchart 时间数据分组为周和月

html - 表数据溢出容器

c# - 如何通过 MVC C# Razor 使用 Google Adsense