我正在使用asp.net mvc 5模板处理单页应用程序并注册外部登录(在此实例中为google)失败并出现验证异常 - "UserId字段是必需的".有问题的代码:
// POST api/Account/RegisterExternal [OverrideAuthentication] [HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)] [Route("RegisterExternal")] public async TaskRegisterExternal(RegisterExternalBindingModel model) { try { if (!ModelState.IsValid) { return BadRequest(ModelState); } ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity); if (externalLogin == null) { return InternalServerError(); } IdentityUser user = new IdentityUser//(model.UserName); { UserName = model.UserName }; user.Logins.Add(new IdentityUserLogin { LoginProvider = externalLogin.LoginProvider, ProviderKey = externalLogin.ProviderKey }); IdentityResult result = await UserManager.CreateAsync(user); IHttpActionResult errorResult = GetErrorResult(result); if (errorResult != null) { return errorResult; } return Ok(); } catch (Exception exception) { throw; } }
我很感激帮助
修复很简单,但我觉得很奇怪,模板生成的代码不能开箱即用.IdentityUserLogin对象具有必须设置的UserID属性.
IdentityUser user = new IdentityUser { UserName = model.UserName }; user.Logins.Add(new IdentityUserLogin() { LoginProvider = externalLogin.LoginProvider, ProviderKey = externalLogin.ProviderKey, UserId = user.Id }); IdentityResult result = await UserManager.CreateAsync(user);