WebAPI 不会在 AccountController 中公开所需的方法。
我使用添加到 AccountController 的这两种方法
[Route("ForgotPassword")]
public async Task<IHttpActionResult> ForgotPassword(ForgotPasswordViewModel model)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var user = await UserManager.FindByNameAsync(model.UserName) ?? await UserManager.FindByEmailAsync(model.UserName);
if (user == null)
{
return Ok("Ok");
}
if (user.Email == null)
{
throw new InvalidOperationException("Cannot send email. Email address not configured.");
}
var token = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
#if DEBUG
System.Diagnostics.Process.Start(
string.Format(
"http://localhost:4444/#/forgot-password-reset/{0}/{1}",
HttpUtility.UrlEncode(user.UserName),
HttpUtility.UrlEncode(token)
)
);
#endif
SendMailForgotPassword(user, token);
return Ok("Ok");
}
[Route("ForgotPasswordReset")]
public async Task<IHttpActionResult> ForgotPasswordReset(ForgotPasswordResetViewModel model)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var user = await UserManager.FindByNameAsync(model.UserName) ?? await UserManager.FindByEmailAsync(model.UserName);
if (user == null)
{
return Ok("Ok");
}
var result = await UserManager.ResetPasswordAsync(user.Id, model.Token, model.NewPassword);
if (result.Succeeded)
{
return Ok("Ok");
}
throw new InvalidOperationException(string.Join("\r\n", result.Errors));
}