c# - 在 ActionFilterAttribute 中设置 TempData

标签 c# asp.net-mvc tempdata actionfilterattribute

我有一个自定义操作过滤器,在 OnActionExecuting 中,根据特定条件,注销用户并将他们重定向到站点的主页。重定向部分的(剥离的)代码如下

  filterContext.Controller.TempData.Add("key", "Message");

  filterContext.Result = new RedirectResult("/");

如上所述,我还设置了一个 tempData 消息。因为用户已经注销,当他们点击主页时,[Authorize] 属性会将他们重定向到登录 GET 页面。在登录 View 中,我正在显示来自 tempData 的所有消息。但是在这种情况下,tempData 是空的。

这与我的登录 POST 的工作方式非常相似(如果无效,它会重定向到主页,主页会重定向到登录并显示在登录帖子中设置的 tempData 消息)。这段代码可以在下面看到

   TempData.Add("key", errorMessage);

   return Redirect("/"));

我之所以这样做,而不是专门重定向到登录页面,是因为这段代码分布在许多网站上,所以我们不知道登录 GET url 是什么。

有没有人知道为什么这适用于登录 POST 但不适用于 ActionFilter 重定向?

编辑:

如果我删除自定义操作过滤器中的注销调用,tempData 仍设置在主页操作中 - 但这并不能解释为什么它适用于登录 POST 但不适用于操作过滤器?

最佳答案

事实证明,当我从系统中注销用户时,我也放弃了 session (调用 HttpContextBase.Session.Abandon())并重置了 cookie session ID。这些影响了 TempData 行为。通过删除这些调用,现在可以正确设置和显示 tempData。

关于c# - 在 ActionFilterAttribute 中设置 TempData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16145700/

相关文章:

asp.net-mvc - 无法从 asp mvc 项目中的 iis 上的 Content 文件夹加载图像

asp.net-mvc - 如何在asp.net mvc 应用程序中自动生成随 secret 码?

asp.net-mvc-2 - 在 ASP.NET MVC 2 中读取后仍保留 TempData

viewmodel - ASP.NET MVC 3 中的动态 TempData

c# - 与登录用户以外的用户一起使用兑换 (Outlook) - 并收到错误

C# 自定义事件始终为空

c# - 命名空间 'Controls' 中不存在类型或命名空间名称 'System.Windows'(是否缺少程序集引用?)

C# 从计算机获取日期

c# - ASP.net Identity SecurityStampValidator OnValidateIdentity regenerateIdentity 参数

asp.net-mvc-2 - TempData ["message"] 不可靠——我做错了什么?