Это проект Asp.Net WEB Api. Я пытаюсь заставить пользователей зарегистрироваться на сайте и отправить электронное письмо пользователям, чтобы подтвердить их электронную почту перед тем, как предоставить доступ. Я могу зарегистрировать и сгенерировать токен для подтверждения электронной почты, но генерация URL-адреса обратного вызова не удалась. Вот мой код до сих пор.ASP.NET Web API 2 - Регистрация пользователя Подтверждение подтверждения электронной почты
AccountController.cs
[AllowAnonymous]
[Route("Register")]
public async Task<IHttpActionResult> Register(UserModel userModel)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
IdentityResult result = await authRepository.RegisterUser(userModel);
IHttpActionResult errorResult = GetErrorResult(result);
if (errorResult != null)
{
return errorResult;
}
return Ok();
}
AuthRepository.cs
public async Task<IdentityResult> RegisterUser(UserModel userModel)
{
IdentityUser user = new IdentityUser
{
UserName = userModel.UserName,
Email = userModel.UserName
};
IdentityResult result = await userManager.CreateAsync(user, userModel.Password); //var result
if (result.Succeeded)
{
try
{
var provider = new DpapiDataProtectionProvider("TestWebAPI");
userManager.UserTokenProvider = new DataProtectorTokenProvider<IdentityUser>(provider.Create("EmailConfirmation"));
var code = await userManager.GenerateEmailConfirmationTokenAsync(user.Id);
UrlHelper urlHelper = new UrlHelper();
var callbackUrl = urlHelper.Action
(
"ConfirmEmail", "Account",
new { userId = user.Id, code = code },
protocol: "http"
);
await userManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm...." + "<a href=\"" + callbackUrl + "\">click here</a>");
}
catch (Exception ex)
{
throw new Exception(ex.ToString());
}
}
return result;
}
Он терпит неудачу в точке, где я генерировать CallBackURL. Я получаю это исключение: "Значение не может быть пустым \ г \ nParameter имя: RouteCollection"
трассировки стека
at System.Web.Mvc.UrlHelper.GenerateUrl(String routeName, String actionName, String controllerName, RouteValueDictionary routeValues, RouteCollection routeCollection, RequestContext requestContext, Boolean includeImplicitMvcValues)
at System.Web.Mvc.UrlHelper.GenerateUrl(String routeName, String actionName, String controllerName, String protocol, String hostName, String fragment, RouteValueDictionary routeValues, RouteCollection routeCollection, RequestContext requestContext, Boolean includeImplicitMvcValues)
at System.Web.Mvc.UrlHelper.Action(String actionName, String controllerName, Object routeValues, String protocol)
at TestWebAPI.AuthRepository.<RegisterUser>d__1.MoveNext() in d:\Workspace\VKalpa 2.0\Projects\Test\WebAPI-0.2\TestWebAPI\TestWebAPI\AuthRepository.cs:line 44
Может кто-то пожалуйста, помогите?
Пробовал это, и это сработало! Я использовал 'System.Web.Mvc.UrlHelper'. –
Использование 'throw new Exception (ex.ToString()) просто ужасно. Просто используйте простой «бросок», чтобы не испортить опыт отладки у кого-то, улавливающего исключение. – ProfK
@ProfK, Обновлен код. –