Создайте ссылку для сброса пароля с данными и отправьте на электронную почту ASP.NET Core Web-API

#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, с которым они действительно могут взаимодействовать.