我有一个自定义操作过滤器,它在 内部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 但不适用于操作过滤器?