首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >asp.net mvc: TempData和AuthorizeAttribute

问asp.net mvc: TempData和AuthorizeAttribute
EN

Stack Overflow用户
提问于 2010-02-03 17:53:38
回答 2查看 1.8K关注 0票数 1

作为this question的后续,我想知道我的TempData到底发生了什么。

设想1:

validated

  • success

  • 用户登录

  • 用户提供电子邮件地址

  • 用户接收电子邮件与验证代码

  • 用户单击验证url

H 110用户是通过TempData设置显示的<代码>H 213F 214

设想2:

  • 用户登录
  • 用户提供电子邮件地址
  • 用户注销/超时
  • 用户收到电子邮件时使用验证代码

H 124用户单击验证url H 225H 126用户is

  • >用户是不通过验证操作中的TempData设置显示的<代码>H 229<代码>F 230/代码>

现在,我看不出有什么理由让用户登录来验证。在场景1中,我在TempData中添加了一条“成功”消息,并返回RedirectToAction(“索引”)。索引操作有一个AuthorizeAttribute --如果它们没有登录,它们将被重定向到登录屏幕(单独的控制器)。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-03 17:57:11

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

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

票数 6
EN

Stack Overflow用户

发布于 2010-02-03 18:04:07

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

代码语言:javascript
复制
return RedirectToAction("Confirm", new { status = "Success!" });

(假定您声明了以下路由和操作方法:)

代码语言:javascript
复制
routes.MapRoute("Confirmation",
    "Account/Confirm/{status}", 
    new { controller = "Account", action = "Confirm", status = "" });

public ActionResult Confirm(string status)
{
    return View(status);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2194123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档