在ActionFilterAttribute中设置TempData

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

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

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

如上所述,我也设置了一个tempData消息。 因为用户已经注销,所以当他们到达主页时, [Authorize]属性将把它们重定向到登录GET页面。 在登录视图中,我显示来自tempData内的任何消息。 但是在这种情况下tempData是空的。

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

   TempData.Add("key", errorMessage);

   return Redirect("/"));

我这样做的原因,而不是专门重定向到登录页面,因为这个代码分布在很多网站,所以我们不知道登录GET网址是什么。

有没有人有任何信息,为什么这是为登录POST,但不是为ActionFilter重定向?

编辑:

如果我在自定义操作过滤器中删除了注销调用,那么tempData仍然设置在Home操作中 - 但是这不能解释为什么它对于登录POST而不是操作过滤器起作用?


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


将结果设置为new RedirectResult("/")将导致当前的服务器处理停止,并向客户端发送一个响应,通知客户端请求一个新的URL - 您在RedirectResult中说过的一个新URL。 第二个请求然后是不同的,并且不包含先前处理的值。 尝试使用Redirect("/");Server.Transfer("/"); 在相同的客户端请求中服务新的路由。

链接地址: http://www.djcxy.com/p/12911.html

上一篇: Setting TempData within a ActionFilterAttribute

下一篇: JdbcTemplate multiple result sets