【发布时间】:2013-04-22 11:10:16
【问题描述】:
我有一个自定义操作过滤器,在OnActionExecuting 内,根据特定条件,注销用户并将他们重定向到网站的主页。重定向部分的(剥离)代码如下
filterContext.Controller.TempData.Add("key", "Message");
filterContext.Result = new RedirectResult("/");
如上所述,我也在设置一个 tempData 消息。因为用户已经注销,所以当他们点击主页时,[Authorize] 属性会将他们重定向到登录 GET 页面。在登录视图中,我正在显示来自 tempData 的任何消息。但是在这种情况下 tempData 是空的。
这与我的登录 POST 的工作方式非常相似(如果无效,它会重定向到主页,然后重定向到登录并显示登录帖子中设置的 tempData 消息)。这段代码可以在下面看到
TempData.Add("key", errorMessage);
return Redirect("/"));
我之所以这样做,而不是专门重定向到登录页面,是因为这段代码分布在许多站点上,所以我们不知道登录 GET url 是什么。
有没有人知道为什么这对登录 POST 有效,但对 ActionFilter 重定向无效?
编辑:
如果我删除自定义操作过滤器中的注销调用,tempData 仍然设置在 Home 操作中 - 但这并不能解释为什么它适用于 Login POST 而不是操作过滤器?
【问题讨论】:
标签: c# asp.net-mvc tempdata actionfilterattribute