我在应用程序中实现了Account
,在Register
控制器内部,有一个名为Register
的方法。方法var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
var callbackUrl = Url.Action("ConfirmEmail", "Account", new
{
userId = user.Id,
token = code
}, protocol: Request.Scheme);
await _emailSender.SendEmailAsync(user.Email, _localizer["ConfirmYourEmail"], _localizer["ConfirmAccountTemplate", callbackUrl]);
允许用户在网站上注册,在此方法中,我具有以下代码:
callBackUrl
如您所见,我生成了一个确认代码,然后创建了一个SendEmailAsync
,用户可以在电子邮件中找到该Microsoft.AspNetCore.Identity.UI.Services
来确认电子邮件地址。最后,我调用Repository
,它实际上是Controller
的接口方法的实现。
现在主要问题如下:我需要在ASP.NET Core
类中使用相同的代码,因此不在{{1}}内使用,有没有地方可以存储这种类型的代码而无需创建冗余?
PS:很抱歉,这个问题看起来很愚蠢,但是我实际上是{{1}}的新手,我想学习如何创建一个好的项目结构。
在此先感谢您的帮助。
答案 0 :(得分:0)
我需要重用该方法来创建代码并发送电子邮件
这是一个快速标记,我没有测试它是否有效。您需要进行以下操作,并在依赖注入(DI)中使用它。您可能需要添加IUrlHelper
和IHttpContextAccessor
public class SomeClass : ISomeClass
{
private HttpContext _ctx;
private IUrlHelper _url;
private IConfiguration _localizer;
private IEmailSender _emailSender;
private UserManager<ApplicationUser> _userManager;
public SomeClass(
IUrlHelper url,
IHttpContextAccessor ctx,
IConfiguration config,
IEmailSender emailSender,
UserManager<ApplicationUser> userManager)
{
_ctx = ctx.HttpContext;
_url = url;
_localizer = config;
_emailSender = emailSender;
_userManager = userManager;
}
public async Task SendEmailWithCode(string email)
{
var user = await _userManager.FindByEmailAsync(email);
var code = await _userManager.GeneratePasswordResetTokenAsync(user);
var callbackUrl = _url.Action(nameof(ResetPassword), "Account", new { userId = user.Id, code }, protocol: _ctx.Request.Scheme);
await _emailSender.SendEmailAsync(user.Email, _localizer["ConfirmYourEmail"], _localizer["ConfirmAccountTemplate"], callbackUrl);
}
}