我正在开发一个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
}
....
}
我尝试过以下网址。
答案 0 :(得分:2)
您想要做什么以及可以实现的是两件不同的事情。
对API的每次调用都是离散的,不会跟踪以前的请求。但是,由于你也有一个MVC应用程序,我建议你在那里维护会话,并简单地将你想要的任何内容作为参数传递给API。
因此,如果可以,请将您生成的OTP代码返回到MVC应用程序,然后将其存储在会话中,然后在后续API请求中将其传递给您的Web应用程序。
如果您描述了应用程序的流程会有所帮助,因为建议将基于此。
如果您有多个客户端使用您的API,那么每个客户端都必须维护正常运行所需的数据,否则您将需要执行额外的数据库访问。您可以根据具体情况更好地使用哪种解决方案。
答案 1 :(得分:1)
太棒了,你知道" API是无国籍的"。我完全赞同安德烈的话。
你想做什么和可以实现的是两件不同的事情。
如果您不想将OTP存储在数据库中,那么为什么不在HttpRequestHeader中传递OTP。
在标题中传递OTP(首选加密OTP,然后在您的WEB API中解密。
根据您的需要建议