#c# #asp.net #asp.net-mvc #model-view-controller
#c# #asp.net #asp.net-mvc #model-view-controller
Вопрос:
Прежде всего, я также проверил другие решения здесь, но, похоже, это не решает мою проблему. Проблема в том, что все работает нормально. Если пользователь нажимает «Забыть пароль» и вводит свое имя пользователя. Ему отправляется электронное письмо со ссылкой для сброса пароля. Теперь, если пользователь нажимает на URL-адрес, он перенаправляется на URL-адрес, но страница resetpassword не загружается, вместо этого загружается другое условие, которое является страницей HttpNotFound() . Серьезно нужно знать, что происходит не так с моим кодом.
Это мое действие ForgotPassword
[HttpPost]
public ActionResult ForgotPassword(string username)
{
string message = "";
using (MBNSystemEntities db = new MBNSystemEntities())
{
var userdetails = db.Users.Where(x => x.UserName == username).FirstOrDefault();
if (userdetails != null)
{
string validationKey = Guid.NewGuid().ToString().Substring(0, 8);
string validationPin = Guid.NewGuid().ToString().Substring(0, 4);
SendMail(userdetails.Email, validationKey, "ResetPassword");
UserValidationRequest uvr = new UserValidationRequest();
uvr.UserId = userdetails.UserId;
uvr.ValidationType = 1;
uvr.ValidationExpiryDate = DateTime.Now.AddDays(1);
uvr.ValidationKey = validationKey;
uvr.ValidationPin = validationPin;
uvr.ValidationStatus = 0;
db.UserValidationRequests.Add(uvr);
db.SaveChanges();
message = "Reset Password link has been sent to your email id.";
}
else
{
message = "Account Not Found";
}
}
ViewBag.Message = message;
return View();
}
И это мое действие ResetPassword
public ActionResult ResetPassword(string validationKey)
{
if(string.IsNullOrWhiteSpace(validationKey))
{
return HttpNotFound();
}
using (MBNSystemEntities db = new MBNSystemEntities())
{
var user = db.UserValidationRequests.Where(x => x.ValidationKey == validationKey).FirstOrDefault();
if (user != null)
{
ResetPasswordModel model = new ResetPasswordModel();
model.validationKey = validationKey;
return View(model);
}
else
{
return HttpNotFound();
}
}
}
Я проверил, поставив точку останова. Ключ проверки передается null в Forgetpassword(строка validationkey) вместо фактического ключа проверки, сгенерированного в действии ForgotPassword.
Это образец электронной почты:
Комментарии:
1.
uvr.ValidationKey = validationKey;
этоnull
вы говорите?2. Нет, сэр, uvr.validationKey = validationKey в порядке. Там передается значение. validationKey в методе ForgotPassword передается значение null
3. или это
ResetPassword
так?4. Я говорю о «public ActionResult ResetPassword (string validationKey)» этот
5. можете ли вы добавить образец письма?
Ответ №1:
отправленное вами электронное письмо неверно с точки зрения передаваемых значений
localhost:44338/Accounts/ResetPassword?vk={value}
он ищет параметр с именем vk
, но он должен быть validationKey
если вы можете изменить свою SendEmail
функцию на add validationKey
вместо vk
нее, это решит вашу проблему
или
в вашем ResetPassword(string validationKey)
вы можете изменить имя на
ResetPassword(string vk)