asp.net mvc:TempData和AuthorizeAttribute

chr*_*ris 1 asp.net-mvc tempdata

作为这个问题的后续,我想知道我的TempData发生了什么.

场景1:

  • 用户登录
  • 用户提供电子邮件地址
  • 用户收到带验证码的电子邮件
  • 用户点击验证网址
  • 用户已经过验证
  • 成功消息通过验证操作中设置的TempData显示

场景2:

  • 用户登录
  • 用户提供电子邮件地址
  • 用户注销/超时
  • 用户收到带验证码的电子邮件
  • 用户点击验证网址
  • 用户已经过验证
  • 成功消息不会通过验证操作中设置的TempData显示

现在,我没有看到用户登录进行验证的原因.在场景1中,我在TempData中输入了"Success"消息,并返回RedirectToAction("Index").索引操作具有AuthorizeAttribute - 如果他们未登录,则会将其重定向到登录屏幕(单独的控制器).

我希望登录屏幕显示我的消息,但TempData似乎在这种情况下被清除.我是否误解了TempData生命周期?它是否仅适用于同一控制器内的请求?

tva*_*son 6

问题是如果用户未登录,AuthorizeAttribute会在循环中引入另一个重定向.您正在将用户重定向到另一个操作,然后,如果用户未登录,则AuthorizeAttribute会将其重定向到登录页面.TempData只存在于一个请求周期内,因此额外的重定向(请求)将清空它并且在登录页面上不可用.

您可以考虑将其直接放在Session中,而不是将TempData前端放入Session.只要会话存在,它应该仍然存在.