在ASP.NET WEP API控制器中确认后重定向

时间:2015-11-14 20:39:50

标签: asp.net-mvc asp.net-web-api2

我有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方法是否好,或者有更好的方法 什么是最合适的方式

2 个答案:

答案 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");