在 ASP.NET WEP API 控制器中确认后重定向
Redirect after confirmation in ASP.NET WEP API controller
我有网络 api 帐户控制器,我在其中确认用户电子邮件
[System.Web.Http.AllowAnonymous]
[System.Web.Http.HttpGet]
[System.Web.Http.Route("ConfirmEmail", Name = "ConfirmEmailRoute")]
public async Task<IHttpActionResult> ConfirmEmail(string userId = "", string code = "")
{
if (string.IsNullOrWhiteSpace(userId) || string.IsNullOrWhiteSpace(code))
{
ModelState.AddModelError("", "User Id and Code are required");
return BadRequest(ModelState);
}
IdentityResult result = await this.AppUserManager.ConfirmEmailAsync(userId, code);
if (result.Succeeded)
{
return Ok();
}
else
{
return GetErrorResult(result);
}
}
}
当用户单击来自电子邮件的确认 link 时调用此方法。之后我想将它重定向到 "ConfirmidSuccessfully" 页面
在 MVC 中,我们可以这样做:
return View("ConfirmidSuccessfully");
还有其他重定向方式,例如:
var response = Request.CreateResponse(HttpStatusCode.Moved);
response.Headers.Location = new Uri("/ConfirmidSuccessfully");
return response;
其实有2个问题:
根据WEBAPI从webapi方法重定向好不好,还是有更好的办法
最合适的方法是什么
由于您正在 returning IHttpActionResult,因此您可以 return 在操作中重定向,这是更可取的方式:
return this.Redirect("/path/to/redirect");
使用 REST 时重定向到视图或网页不是一个好习惯,因此 ASP.Net Web API.
只是 return 给客户端一个成功的状态代码。让客户端自己做重定向。
例如,如果您使用 AngularJS 应用程序连接您的网站 API,那么在成功完成电子邮件确认调用后,重定向到网站 page/view通过使用您存储在客户端的网页 URL。
[编辑]
根据您的评论
I use angularjs, but the call to email confirmation comes from user's email, not from client.
然后您必须通过将主机的 url 设为您的 Angular JS 应用程序主机来在服务器端生成确认电子邮件。例如myangularjsapp.com/emilconfirmation/token
。向您的用户发送一封包含此 URL 的电子邮件。
使用 URL 用户会从他的电子邮件重定向到您的 AngularJS 应用程序。当他点击应用程序时,您通过从 AngularJS 应用程序 url.
检索令牌来初始化对 ASP.Net Web API 的调用
我有网络 api 帐户控制器,我在其中确认用户电子邮件
[System.Web.Http.AllowAnonymous]
[System.Web.Http.HttpGet]
[System.Web.Http.Route("ConfirmEmail", Name = "ConfirmEmailRoute")]
public async Task<IHttpActionResult> ConfirmEmail(string userId = "", string code = "")
{
if (string.IsNullOrWhiteSpace(userId) || string.IsNullOrWhiteSpace(code))
{
ModelState.AddModelError("", "User Id and Code are required");
return BadRequest(ModelState);
}
IdentityResult result = await this.AppUserManager.ConfirmEmailAsync(userId, code);
if (result.Succeeded)
{
return Ok();
}
else
{
return GetErrorResult(result);
}
}
}
当用户单击来自电子邮件的确认 link 时调用此方法。之后我想将它重定向到 "ConfirmidSuccessfully" 页面
在 MVC 中,我们可以这样做:
return View("ConfirmidSuccessfully");
还有其他重定向方式,例如:
var response = Request.CreateResponse(HttpStatusCode.Moved);
response.Headers.Location = new Uri("/ConfirmidSuccessfully");
return response;
其实有2个问题: 根据WEBAPI从webapi方法重定向好不好,还是有更好的办法 最合适的方法是什么
由于您正在 returning IHttpActionResult,因此您可以 return 在操作中重定向,这是更可取的方式:
return this.Redirect("/path/to/redirect");
使用 REST 时重定向到视图或网页不是一个好习惯,因此 ASP.Net Web API.
只是 return 给客户端一个成功的状态代码。让客户端自己做重定向。
例如,如果您使用 AngularJS 应用程序连接您的网站 API,那么在成功完成电子邮件确认调用后,重定向到网站 page/view通过使用您存储在客户端的网页 URL。
[编辑]
根据您的评论
I use angularjs, but the call to email confirmation comes from user's email, not from client.
然后您必须通过将主机的 url 设为您的 Angular JS 应用程序主机来在服务器端生成确认电子邮件。例如myangularjsapp.com/emilconfirmation/token
。向您的用户发送一封包含此 URL 的电子邮件。
使用 URL 用户会从他的电子邮件重定向到您的 AngularJS 应用程序。当他点击应用程序时,您通过从 AngularJS 应用程序 url.
检索令牌来初始化对 ASP.Net Web API 的调用