【发布时间】:2018-09-28 16:43:10
【问题描述】:
我正在开发一个 MVC 应用程序,其中也有单独的 WEB API 项目。 现在我想通过 WEB API 实现基于移动端 OTP 验证的更新电子邮件功能。 Web API 是无状态的,但我仍然想在我的代码中实现 SESSION,以便我可以访问子序列请求中的 OTP 值并对其进行验证。目前,我可以在第一个请求中将 OTP 存储在会话中,但在下一个请求中,会话为空,我无法访问存储的 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
}
....
}
我尝试了以下网址。
【问题讨论】:
-
通常,OTP 在几分钟内有效,因此不要依赖会话存储(这打破了纯无状态的 Rest API 概念)将值存储在持久性存储中(如 SQL 或 Azure 表等)打破了会话的紧密依赖。
标签: c# asp.net-mvc session asp.net-web-api asp.net-web-api2