public async Task <Unit> Handle(Command request, CancellationToken cancellationToken) { var user = await _context .Users .SingleOrDefaultAsync(x => x.Email == request.Email); if (user == null) { throw new RestException(System.Net.HttpStatusCode.BadRequest, "User not found"); } try { var resetToken = await _authTokenService.CreateAuthTokenAsync(user.Id, 24); if (!request.ResetPasswordUrl.EndsWith('/')) { request.ResetPasswordUrl += '/'; } var emailParameters = new Dictionary <string, string>() { { "{Name}", user.DisplayName }, { "{Url}", request.ResetPasswordUrl + System.Web.HttpUtility.UrlEncode(resetToken) } }; await _emailService.ForgotPassword(user.Email, emailParameters); } catch (Exception) { throw new RestException( System.Net.HttpStatusCode.InternalServerError, "Error during forgot password process."); } return(Unit.Value); }