Трудно оценить вашу маршрутизацию, не видя, как выглядит ваш проект и настроен ли ActionResult для представления Resetpassword. Я полагаю, вы используете бритву, а не aspx?
Что я могу сделать, это дать вам следующий пример того, как я осуществляю определенный доступ к сайту по ссылке в электронной почте.
Мы генерируем html и отправляем электронное письмо через smtp или любой другой метод, который вы используете. Ссылка для нажатия - это простой тег привязки с href, содержащим URL и строку запроса. пример:
текст сообщения: нажмите здесь, чтобы получить доступ к паролю.
Якорь HTML: <a href="https://www.testSite.com/PasswordReset/AuthEmailClick?AutKn=07531a9d-84cb-4282-9387-1373fe9837be"
То, что происходит выше, заключается в том, что мы генерируем токен, в котором хранится информация о пользователях, а не фактическая информация о пользователе. Если вы наблюдаете приведенный выше URL, «PasswordReset» - это имя контроллера, «AuthEmailClick» - это ActionResult, который определит, к какому представлению направлен пользователь.
В вашем проекте вам нужно иметь контроллер «PasswordReset», как в приведенном выше примере, внутри этого контроллера вам нужен ActionResult с именем «AuthEmailClick», как в приведенном выше примере. Код:
public ActionResult AuthAprEm(string AutKn)
{
//The token in the email is stored in database
var authDetails =
GenMethods.ExecuteStoredProc("RedeemAuthToken",
new List<string> { "Token" },
new List<object> { AutKn },
"SQL CONNECTION STRING");
//If the token is invalid, return to relevant view for user to see
if (authDetails.Rows.Count == 0)
{
return RedirectToAction("TokenUsed", "Home", new { });
}
else
{
//GET DESIRED INFORMATION FROM DATABASE QUERY, THEN REDIRECT TO DESIRED VIEW
var username = authDetails.Rows[0]["UserName"].ToString();
var userPwd = authDetails.Rows[0]["UserPassword"].ToString();
if (username.ToLower().Contains("tmp_") && userPwd.ToLower().Contains("tmp_"))
{
return RedirectToAction("TempCredWarn", "Home", new { });
}
var authRsp1 = WebAuth.UserAuth(username, userPwd, ConfigurationManager.ConnectionStrings["DbPlaceHolder"].ConnectionString.Replace("{PlcHold}", ConfigurationManager.AppSettings["HostDb"]));
authRsp1.Staib = true;
return RedirectToAction("CreateNewSession", authRsp1);
}
}
Таким образом, в приведенном выше примере есть ActionResult, который будет вызываться, когда пользователь щелкает ссылку в электронном письме. В этом actionResult вы можете следовать любой логике, которую предпочитаете. Важным аспектом является RedirectToAction, в который вы в конечном итоге включите имя действия «resetPassword», которое будет выполнено и вернет правильное представление.
Надеюсь, это поможет.