测试时,我尝试匹配来自我的
RegisterViewModel
的输入,无论我在邮递员中尝试使用什么不同的输入来发布用户,它都不起作用,不确定这是否与该方法或我的输入有关邮递员。
RegisterViewModel
看起来像这样:
public class RegisterViewModel
{
[Required]
public string Username { get; set; }
[Required, DataType(DataType.Password)]
public string Password { get; set; }
[Required, DataType(DataType.Password)]
public string ReEnterPassword { get; set; }
public string Email { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
这是我尝试输入到postman:
{
"username" : "user01",
"password" : "test123",
"reEnterPassword" : "test123",
"email" : "[email protected]",
"firstName" : "Joe",
"lastName" : "Bloggs"
}
使用的方法:
[HttpPost("api/auth/register")]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> NotWrkingRegister([FromBody] RegisterViewModel user)
{
if (user.Password != user.ReEnterPassword)
{
ModelState.AddModelError(string.Empty, "Password don't match");
return BadRequest();
}
try
{
var newUser = Mapper.Map<RegisterViewModel, AppUser>(user);
newUser.UserName = user.Username;
newUser.APIKey = Guid.NewGuid();
//newUser.Email = user.Email;
var userCreationResult = await userManager.CreateAsync(newUser, user.Password);
if (!userCreationResult.Succeeded)
{
foreach (var error in userCreationResult.Errors)
ModelState.AddModelError(string.Empty, error.Description);
return View(user);
}
else
{
string confirmationToken = userManager.
GenerateEmailConfirmationTokenAsync(newUser).Result;
string confirmationLink = Url.Action("ConfirmEmail",
"Account", new
{
userid = newUser.Id,
token = confirmationToken
},
protocol: HttpContext.Request.Scheme);
var callbackUrl = Url.Action("confirmEmail", "api/auth",
new { userId = newUser.Id.ToString(), code = confirmationToken },
protocol: HttpContext.Request.Scheme);
callbackUrl = $"http://localhost:49181/api/auth/confirmemail?userId=" + newUser.Id.ToString() + $"&token={confirmationToken}";
SendEmail(callbackUrl, newUser);
}
UserViewModel _userVM =
Mapper.Map<AppUser, UserViewModel>(newUser);
return new OkObjectResult(_userVM);
}
catch (Exception ex)
{
_logger.LogError($"Exception thrown while creating JWT: {ex}");
}
return BadRequest();
}
现在工作,数据库中已经注册了重复的值。注释掉
[ValidateAntiForgeryToken]
并运行指向每个单独组件的代码断点后,发现问题并纠正并获得所需的输出。