asp.net mvc:TempData和AuthorizeAttribute

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

情景1:

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

  • 用户登录
  • 用户提供邮箱地址
  • 用户注销/超时
  • 用户收到带验证码的电子邮件
  • 用户点击验证网址
  • 用户被验证
  • 成功消息不会通过验证操作中设置的TempData显示
  • 现在,我看不到用户登录验证的原因。 在方案1中,我在TempData中放入了一个“成功”消息,并返回RedirectToAction(“Index”)。 索引操作有一个AuthorizeAttribute - 如果它们没有登录,它们会被重定向到登录屏幕(单独的控制器)。

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


    问题是,如果用户没有登录,AuthorizeAttribute会在周期中引入另一个重定向。您将用户重定向到另一个操作,如果用户未登录,则AuthorizeAttribute将他们重定向到登录页面。 TempData只存在于一个请求周期中,所以额外的重定向(请求)将清空它并且它在登录页面上不可用。

    您可以考虑直接将它放在会话中,而不是Session的TempData前端。 只要会议活着,它应该仍然在那里。


    [Authorize]引入了一个额外的重定向,它清除了TempData (Tvanfosson已经解释了细节)。 因此,为了实现这个目标,例如,您可以在重定向到的方法上使用标志

    return RedirectToAction("Confirm", new { status = "Success!" });
    

    (鉴于你有以下路线和行动方法宣布:)

    routes.MapRoute("Confirmation",
        "Account/Confirm/{status}", 
        new { controller = "Account", action = "Confirm", status = "" });
    
    public ActionResult Confirm(string status)
    {
        return View(status);
    }
    
    链接地址: http://www.djcxy.com/p/74425.html

    上一篇: asp.net mvc: TempData and AuthorizeAttribute

    下一篇: Using RowMapper and JdbcTemplate got NullPointerException