【发布时间】:2020-09-12 04:24:06
【问题描述】:
我有 Web API 应用程序,我想实现电子邮件确认。
现在我有一个采用address 的方法——客户端主机将在回调网址uriBuilder 中,并将由用户从邮件中打开:
public async Task<IdentityResult> RegisterAsync(string email, string userName, string password, string address)
{
var user = new ApplicationUser { Email = email, UserName = userName };
var result = await _userManager.CreateAsync(user, password);
if (result.Succeeded)
{
var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
var uriBuilder = new UriBuilder(address) { Port = -1 };
var query = HttpUtility.ParseQueryString(uriBuilder.Query);
query["userId"] = user.Id;
query["code"] = code;
uriBuilder.Query = query.ToString();
await _emailService.SendEmailAsync
(
user.Email,
"Email confirmation",
$"Confirm the registration by clicking on the <a href='{uriBuilder}'>link</a>."
);
}
return result;
}
然后在客户端将对 API 进行 POST 调用:
public async Task<bool> ConfirmEmailAsync(string userId, string code)
{
var user = await _userManager.FindByIdAsync(userId);
if (user == null)
{
throw new UserNotFoundException();
}
var result = await _userManager.ConfirmEmailAsync(user, code);
return result.Succeeded;
}
这样用户就不会直接与 API 交互。
请求中传递主机地址可以吗?如果没有,如果有多个客户,我该怎么办?如果是一个客户端,我可以将其移至配置。
【问题讨论】:
标签: c# rest asp.net-web-api asp.net-core-webapi