在 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 的调用