【问题标题】:Redirect Loop in OnActionExecutingOnActionExecuting 中的重定向循环
【发布时间】:2012-02-16 15:18:03
【问题描述】:

当给定条件为假时,我试图将用户引导到我网站上的某个页面(VB、MVC4),但我不断收到重定向循环:

Error 310 (net::ERR_TOO_MANY_REDIRECTS): There were too many redirects.

这是我的代码:

Public Class UserValidation
    Inherits ActionFilterAttribute

    Public Overrides Sub OnActionExecuting(filterContext As System.Web.Mvc.ActionExecutingContext)

        If Not DoSomeInternalCheck() Then
            filterContext.Result =
                New RedirectToRouteResult(
                    New RouteValueDictionary() From {
                        {"controller", "Home"},
                        {"action", "MessagePage"}
                    }
                )
        End If

        MyBase.OnActionExecuting(filterContext)

    End Sub

End Class

为了让用户远离网站的其余部分而只让他们看到这一页,我错过了什么?

【问题讨论】:

    标签: asp.net-mvc vb.net redirect


    【解决方案1】:

    您需要更改此过滤器,以便在用户访问您希望将他们重定向到的主页时不会重定向用户!

    重定向结果会向他们的浏览器发送一条消息,上面写着“转至此其他 URL”。当他们访问另一个 URL 时,他们的请求会通过相同的过滤器,该过滤器会告诉他们“转至此 URL [与以前相同的 URL]”。最终浏览器放弃并(正确地)认为您可能遇到了某种无限重定向循环。

    【讨论】:

    • 我认为这是问题所在,但我不确定如何进行检查。我尝试检查 filterContext 以查看这是否是“Home/MessagePage”请求,但没有成功,但到目前为止还没有成功。我确定我做错了。
    • @gfrizzle:尝试在OnActionExecuting 的开头设置断点并在filterContext 上使用手表来查看您可以使用哪些信息,以及这些信息在主页/消息页面请求。由此,提出一个忽略该特定页面的标准应该相当简单。
    【解决方案2】:
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        try
        {
            base.OnActionExecuting(filterContext);
    
            user = (LoginViewModel)HttpContext.Current.Session["user"];
            if (user == null)
            {
               
                if (filterContext.Controller is AccountController == false)
                {
                    filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new
                    {
                        controller = "Account", 
                        action = "Login"        
                    }));
                }
            }
        }
        catch (Exception)
        {
            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new
            {
                controller = "Account",
                action = "Login"
            }));
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-17
      • 2014-06-02
      • 2016-12-16
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      相关资源
      最近更新 更多