簡體   English   中英

如何在 asp.net 核心 3.1 中從存儲庫 class 創建確認 email 回調

[英]How to create confirm email callback from repository class in asp.net core 3.1

I want to make an email confirmation callback link from asp.net core web API repository class, This is easy when done in the controller of the API, but I am having trouble doing this from the repository class. 我不斷收到此錯誤:“找不到與 ActionContext 關聯的 IRouter。如果您的應用程序正在使用端點路由,那么您可以獲取具有依賴注入的 IUrlHelperFactory 並使用它來創建 UrlHelper,或使用 Microsoft.AspNetCore.Routing.LinkGenerator 。” 這就是我到目前為止所擁有的:

這是我的注冊存儲庫代碼:

enter code here
public async Task<(bool IsSuccess, string ErrorMessage)> Register(RegisterDTO model)
{
     if (model != null)
     {
         var user = _mapper.Map<ApplicationUser>(model);
         var result = await _userManager.CreateAsync(user, model.Password);
         if (result.Succeeded)
         {
             await _userManager.AddToRoleAsync(user, "Admin");
             var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
             string _scheme = _urlHelper.ActionContext.HttpContext.Request.Scheme;
             //var callbackurl = _urlHelper.Link("ConfirmEmail",  new { email = 
                  user.Email, code = code });
             var callbackurl = 
             _urlHelper.Action("ConfirmEmail",nameof(AccountController), new { email = 
              user.Email, code = code }, _scheme);
              var mailresult = _mailSender.SendEmail(model.Email, "Please confirm your 
              account by clicking here: <a href=\"" + callbackurl + "\">link</a>");
              return (true, "Account created successfully");
            }
            return (false, "Eror occured while creating your account");
        }

        return (false, "Please provide the user data");
    }

帳號 Controller

enter code here
 [HttpGet("{token}/{email}")]
 public async Task<IActionResult> ConfirmEmail(string token, string email)
 {
     var result = await _repository.ConfirmEmail(token, email);
     if (result.IsSuccess)
         return Ok(result.ErrorMessage);
     else
         return BadRequest(result.ErrorMessage);
  }

我設法讓它工作。 見下面的代碼:

enter code here
public async Task<(bool IsSuccess, string ErrorMessage)> 
      Register(RegisterDTO model)
{
    if (model != null)
    {
        var user = _mapper.Map<ApplicationUser>(model);
        var result = await _userManager.CreateAsync(user, model.Password);
        if (result.Succeeded)
        {
            await _userManager.AddToRoleAsync(user, "Admin");
            var _urlHelper = _urlHelperFactory.GetUrlHelper(
                  _actionContextAccessor.ActionContext);
            var code = await _userManager.
                 GenerateEmailConfirmationTokenAsync(user);
            string _scheme = _urlHelper.ActionContext.
                  HttpContext.Request.Scheme;
             var callbackurl = _urlHelper.Action(action: 
                  nameof(AccountController.ConfirmEmail), 
                   controller: "Account", values: 
                   new { email = user.Email, code = code }, 
                   protocol: _scheme);
            var mailresult = _mailSender.SendEmail(model.Email, "Please 
              confirm your account by clicking here: <a href=\"" + 
                    callbackurl + "\">link</a>");
            if (mailresult.IsSuccess)
            {
                 return (true, "Account created successfully, Please visit 
                        your email to confirm your email");
             }
             else
             {
                return (true, $"Account created successfully,  
                       {mailresult.ErrorMessage}");
             }
                
          }
            return (false, result.Errors.ToString());
        }

        return (false, "Please provide the user data");
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM