#asp.net #asp.net-web-api #asp.net-core
#asp.net #asp.net-web-api #asp.net-ядро
Вопрос:
В моем старом проекте MVC core я создал ссылку для восстановления пароля таким способом:
if (ModelState.IsValid)
{
var user = await _userManager.FindByNameAsync(model.Email);
if (user == null)
{
return View("ForgotPasswordConfirmation");
}
var code = await _userManager.GeneratePasswordResetTokenAsync(user);
var callbackUrl = Url.Action("ResetPassword", "Account", new { userId = user.Id, code = code }, protocol: HttpContext.Request.Scheme);
MailSend emailService = new MailSend();
await emailService.SendResetPassword(model.Email,
$"for reset password open a link: <a href='{callbackUrl}'>link</a>");
return RedirectToAction("ForgotPasswordConfirmation", "Account");
}
Вопрос касается этого раздела: var callbackUrl = Url.Action
Теперь у меня есть API-контроллер для этого метода, а не контроллер MVC. Как я могу создать эту ссылку с данными для контроллера API для этого адреса?
[Route("api/account/reset-password")]
Ответ №1:
Во-первых, вам не следует этого делать. API обычно возвращает что-то вроде JSON, которое веб-пользователь не сможет использовать. Если вы отправите пользователя непосредственно на конечную точку API, он, по сути, зайдет в тупик с ответом, который не имеет для него смысла в контексте просмотра веб-страниц.
Если логика для выполнения сброса пароля содержится в конечной точке API, тогда у вас должно быть обычное действие MVC, на которое вы отправляете пользователя. Затем это действие будет взаимодействовать с API от имени пользователя и в конечном итоге вернет HTML, с которым они действительно могут взаимодействовать.