【发布时间】:2022-01-15 12:07:17
【问题描述】:
我想从 asp.net 核心 Web API 存储库类中创建一个电子邮件确认回调链接, 在 API 的控制器中完成此操作很容易,但我无法从存储库类中执行此操作。 我不断收到此错误:
找不到与 ActionContext 关联的 IRouter。如果您的应用程序正在使用端点路由,那么您可以通过依赖注入获取 IUrlHelperFactory 并使用它来创建 UrlHelper,或使用 Microsoft.AspNetCore.Routing.LinkGenerator。
这是我目前所拥有的:
这是我用于注册的存储库代码:
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");
}
账户管理员
[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);
}
【问题讨论】:
-
你不应该这样做,因为它破坏了各个层的责任。使用存储库(或其他服务层)来确定功能应该是什么样的,然后让控制器层执行它。状态包装对象是一种合理的方法。
-
感谢您的建议,请您举例说明如何使用该状态包装器对象??
标签: c# asp.net-core entity-framework-core asp.net-core-webapi asp.net-core-3.1