我有web 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);
}
}
}
当用户点击来自电子邮件的确认链接时,将调用此方法。之后,我想将其重定向到“ConfirmidSuccessfully”页面
在MVC中,我们可以这样做:
return View("ConfirmidSuccessfully");
还有其他方法可以重定向:
var response = Request.CreateResponse(HttpStatusCode.Moved);
response.Headers.Location = new Uri("/ConfirmidSuccessfully");
return response;
实际上有两个问题: 根据WEB API重定向web api方法是否好,或者有更好的方法 什么是最合适的方式
答案 0 :(得分:5)
当您使用REST而不是ASP.Net Web API时,重定向到视图或网页不是一个好习惯。
只需将成功的状态代码返回给客户端即可。让客户端自己进行重定向。
例如,如果您使用AngularJS应用程序连接Web API,则在成功完成电子邮件确认调用后,使用您存储在客户端的网页URL重定向到网页/视图。
<强> [编辑] 强>
根据您的评论
我使用angularjs,但是电子邮件确认的来电来自用户的电子邮件,而不是客户端。
然后,您必须在主机的网址上生成确认电子邮件,方法是让主机的网址成为您的Angular JS应用主机。例如myangularjsapp.com/emilconfirmation/token
。向您的用户发送包含此网址的电子邮件。
使用这样的URL,用户从他的电子邮件重定向到AngularJS App。当他点击应用程序时,您通过从AngularJS应用程序URL中检索令牌来初始化对ASP.Net Web API的调用。
答案 1 :(得分:3)
由于您正在返回IHttpActionResult,您可以在操作中返回重定向,这是更好的方法:
return this.Redirect("/path/to/redirect");