我有一个自定义操作过滤器,在 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/