【问题标题】:ASP.NET MVC: Validation failed for one or more entities. See 'EntityValidationErrors' property for more detailsASP.NET MVC:一个或多个实体的验证失败。有关更多详细信息,请参阅“EntityValidationErrors”属性
【发布时间】:2021-01-02 23:15:10
【问题描述】:

我向我的用户添加了一个新字段:“姓名”(因为我看到 UserName 与电子邮件具有相同的值,所以我不想更改它)。出于某种原因,我无法在 Facebook 注册新用户。带来错误的行是“result = await UserManager.AddLoginAsync(useraux.Id, info.Login);”在 ExternalLoginConfirmation 中,所以我认为 user.Id 在将所有用户信息插入用户表之前可能没有任何价值,所以我在用户放入表后等待,然后通过电子邮件选择它以获取其 ID,但它仍然给我错误。当我向 Facebook 请求更多数据(用户名)时,我认为我破坏了外部登录;为此,我不得不对代码进行一些更改。我在 ExternalLoginCallback 中添加了以下行以获取名字:“var firstName = loginInfo.ExternalIdentity.Claims.First(c => c.Type == "urn:facebook:first_name").Value;"

我的代码:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl)
{
    if (User.Identity.IsAuthenticated)
    {
        return RedirectToAction("Index", "Manage");
    }

    if (ModelState.IsValid)
    {
        // Get the information about the user from the external login provider
        var info = await AuthenticationManager.GetExternalLoginInfoAsync();
        if (info == null)
        {
            return View("ExternalLoginFailure");
        }

        var user = new ApplicationUser { UserName = model.Name, Email = model.Email , Name = model.Name};
        
        var result = await UserManager.CreateAsync(user);
        if (result.Succeeded)
        {
            var useraux = await UserManager.FindByEmailAsync(model.Email);
            result = await UserManager.AddLoginAsync(useraux.Id, info.Login);
            if (result.Succeeded)
            {
                //--
                //await StoreFacebookAuthToken(user);
                await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
                return RedirectToLocal(returnUrl);
            }
        }
        AddErrors(result);
    }

    ViewBag.ReturnUrl = returnUrl;
    return View(model);
}
[AllowAnonymous]
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
    var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
    var firstName = loginInfo.ExternalIdentity.Claims.First(c => c.Type == "urn:facebook:first_name").Value;
    if (loginInfo == null)
    {
        return RedirectToAction("Login");
    }

    // Sign in the user with this external login provider if the user already has a login
    var result = await SignInManager.ExternalSignInAsync(loginInfo, isPersistent: false);
    switch (result)
    {
        case SignInStatus.Success:
            return RedirectToLocal(returnUrl);
        case SignInStatus.LockedOut:
            return View("Lockout");
        case SignInStatus.RequiresVerification:
            return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = false });
        case SignInStatus.Failure:
        default:
            // If the user does not have an account, then prompt the user to create an account
            ViewBag.ReturnUrl = returnUrl;
            ViewBag.LoginProvider = loginInfo.Login.LoginProvider;
            return View("ExternalLoginConfirmation", new ExternalLoginConfirmationViewModel { Email = loginInfo.Email, Name = firstName });
    }
}

编辑:我在 try-catch 块中添加了导致错误的行,它应该将类似“Console.WriteLine(”) 的错误写入控制台状态“{1}”中的“{0}”类型实体有以下验证错误:“”,我到底应该看吗?通过右键单击和“检查”打开的控制台中没有任何内容,并且在 Visual Studio 中什么都不是。但是,它以某种方式解决了我的问题,并且我不再收到错误了。

【问题讨论】:

  • “有关更多详细信息,请参阅 'EntityValidationErrors' 属性” - 是否查看了有关异常的 EntityValidationErrors 集合?如果没有,为什么不呢?
  • Entity Framework 抛出异常,与 Claims 或 Facebook 无关。

标签: c# asp.net-mvc


【解决方案1】:

使用DbEntityValidationException查看错误详情

try
{
    //...

    var result = await UserManager.CreateAsync(user);

    //...
}
catch(DbEntityValidationException ex) 
{
    foreach (var err in ex.ValidationErrors)
    {
        Console.WriteLine(err.ErrorMessage);
    }
}

【讨论】:

    猜你喜欢
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 2021-05-25
    • 2018-01-10
    • 2013-05-13
    • 2014-02-24
    • 1970-01-01
    相关资源
    最近更新 更多