在WEB API中为后续请求维护会话以进行OTP验证

时间:2018-04-18 12:27:49

标签: c# asp.net-mvc session asp.net-web-api asp.net-web-api2

我正在开发一个MVC应用程序,其中还有单独的WEB API项目。 现在,我想通过WEB API实现基于移动设备OTP验证的更新电子邮件功能。 Web API是无状态的,但我仍然希望在我的代码中实现SESSION,以便我可以在子序列请求中访问OTP值并验证它。目前,我能够在第一个请求中将OTP存储在会话中,但在下一个请求中,Session为空,我无法访问存储的OTP值。

我不希望数据库跳转来存储和检索OTP。

public HttpResponseMessage SendOtpOnMobile([FromBody]OtpOnMobileAPIRequest objOtpOnMobileAPIRequest)
{            
    otpValue = CommonUtility.GenerateRandomOTP(4);
    HttpContext.Current.Session["otpGeneratedValue"] = otpValue;
    //Send OTP logic and response code
    ....
}

public HttpResponseMessage ValidateOtpFromMobile([FromBody]ValidateOtpFromMobileAPIRequest objValidateOtpFromMobileAPIRequest)
{
    var otpGeneratedValue = HttpContext.Current.Session["otpGeneratedValue"];
    if(objValidateOtpFromMobileAPIRequest.OTP == otpGeneratedValue)
    {
        //success
    }
    ....
}

我尝试过以下网址。

ASP.NET Web API session or something?

Accessing Session Using ASP.NET Web API

2 个答案:

答案 0 :(得分:2)

您想要做什么以及可以实现的是两件不同的事情。

对API的每次调用都是离散的,不会跟踪以前的请求。但是,由于你也有一个MVC应用程序,我建议你在那里维护会话,并简单地将你想要的任何内容作为参数传递给API。

因此,如果可以,请将您生成的OTP代码返回到MVC应用程序,然后将其存储在会话中,然后在后续API请求中将其传递给您的Web应用程序。

如果您描述了应用程序的流程会有所帮助,因为建议将基于此。

如果您有多个客户端使用您的API,那么每个客户端都必须维护正常运行所需的数据,否则您将需要执行额外的数据库访问。您可以根据具体情况更好地使用哪种解决方案。

答案 1 :(得分:1)

太棒了,你知道" API是无国籍的"。我完全赞同安德烈的话。

  

你想做什么和可以实现的是两件不同的事情。

如果您不想将OTP存储在数据库中,那么为什么不在HttpRequestHeader中传递OTP。

在标题中传递OTP(首选加密OTP,然后在您的WEB API中解密。

根据您的需要建议