gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:25:53 24 4
gpt4 key购买 nike

这是我的注册方法。我将注册方法更改为管理工具。管理工具在没有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com