【问题标题】:Redirect after confirmation in ASP.NET WEP API controller在 ASP.NET WEB API 控制器中确认后重定向
【发布时间】:2015-11-14 20:39:49
【问题描述】:

我有网络 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;

其实有2个问题: 根据WEB API从web api方法重定向是否好,或者有更好的方法 最合适的方法是什么

【问题讨论】:

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


    【解决方案1】:

    当您使用 REST 因此使用 ASP.Net Web API 时,重定向到视图或网页不是一个好习惯。

    只需向客户端返回一个成功的状态码。让客户端自己做重定向。

    例如,如果您使用 AngularJS 应用程序连接您的 Web API,则在成功完成对电子邮件确认的调用后,使用您存储在客户端的网页 URL 重定向到网页/视图。

    [编辑]

    根据您的评论

    我使用 angularjs,但对电子邮件确认的调用来自用户的电子邮件,而不是来自客户端。

    然后,您必须通过将主机的 url 设置为您的 Angular JS 应用程序主机,在服务器端生成确认电子邮件。例如myangularjsapp.com/emilconfirmation/token。向您的用户发送包含此 URL 的电子邮件。

    使用这样的 URL,用户会从他的电子邮件重定向到您的 AngularJS 应用程序。当他点击应用程序时,您通过从 AngularJS 应用程序 url 检索令牌来初始化对 ASP.Net Web API 的调用。

    【讨论】:

    • 我使用了 angularjs,但是对电子邮件确认的调用来自用户的电子邮件,而不是来自客户端。
    • 抱歉,不是从“当他点击应用程序...”中得到的。请你解释一下好吗?我是角度新手
    • 首先,您必须通过基于您的 Angular js 主机应用程序生成 URL 来发送电子邮件。假设我的 Angular js 应用程序使用 myangularjsapp.com。当用户注册我的应用程序时,我会向他发送一封电子邮件。在该电子邮件中,我将在其中放入一个确认 URL。此确认 url 必须包含所有信息,例如令牌,并且必须重定向到我的 angularjs 应用程序的路由。当用户点击这个 url 时,他会点击我的 angularjs 应用程序。当他到达应用程序时,我检索 URL 中的信息。然后我使用这些信息与我的 WEB API 通信并确认电子邮件。
    • Web API 只需要发送成功状态码,因为不再需要重定向。
    • 所以我需要在 myangularjsapp.com/emilconfirmation/token 页面加载上通过 angularjs 调用 webapi 方法?
    【解决方案2】:

    由于您要返回 IHttpActionResult,因此您可以在操作中返回重定向,这是更可取的方式:

    return this.Redirect("/path/to/redirect");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 2019-06-06
      • 1970-01-01
      • 2017-12-27
      • 2017-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多