public async Task <IActionResult> SendResetPasswordLink([FromBody] ResetPasswordLinkModel model) { try { var resetPasswordToken = await _authenticateService.CreateResetPasswordTokenAsync(model.Email); var token = new Token { Email = model.Email, Hash = resetPasswordToken }; var tokenJson = JsonConvert.SerializeObject(token); var tokenJsonBytes = Encoding.UTF8.GetBytes(tokenJson); var tokenJsonBase64 = Base64UrlTextEncoder.Encode(tokenJsonBytes); var resetPasswordLink = $"{model.RedirectUrl}?token={tokenJsonBase64}"; _backgroundJobClient.Enqueue <SendEmailJob>(x => x.SendResetPasswordLinkEmail(model.Email, resetPasswordLink)); var response = new Response { Status = 200, Message = "Account password reset link was sent to you email address." }; return(Ok(response)); } catch (InvalidUserException e) { return(Ok(new Response { Status = 403, Message = e.Message })); } catch { return(Ok(new Response { Status = 500, Message = "Internal Server Error." })); } }