【问题标题】:ASP.NET MVC 3 OnActionExecuting causes infinite loopASP.NET MVC 3 OnActionExecuting 导致无限循环
【发布时间】:2011-05-13 09:56:22
【问题描述】:

我有那个重写的 OnActionExecuting 方法(如果用户登录,则在操作执行之前检查)

public class AuthenticationAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
        { 
            string redirectUrl = string.Format("?returnUrl={0}", filterContext.HttpContext.Request.Url.PathAndQuery);

            filterContext.HttpContext.Response.Redirect(FormsAuthentication.LoginUrl + redirectUrl, true);
        }
        else 
            base.OnActionExecuting(filterContext);
    }
}

为什么 - 如果用户未登录 - 响应会再次重定向到该方法。为什么?

【问题讨论】:

    标签: asp.net-mvc-3 onactionexecuting


    【解决方案1】:

    这可能是因为您重定向到的控制器操作(我认为是登录 url)也使用此属性进行了修饰。因此,如果用户未通过身份验证,他将被重定向到登录操作,并且由于他未通过身份验证,他将被重定向到登录操作,依此类推。我个人建议您使用[Authorize] 属性而不是编写此类操作过滤器。

    【讨论】:

    • 但是如果我在控制器上使用 [Authorize] 属性,结果是一个空白页面(正确更改了 URL)
    • @Tony,authorize 属性将自动重定向到您在 web.config 的 <forms> 部分中定义的登录页面。因此,请确保此处定义的 url 对应于您的应用程序中的实际控制器操作。
    猜你喜欢
    • 2015-05-20
    • 2020-08-27
    • 2021-05-07
    • 2012-08-24
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多