ASP.NET MVC 3 OnActionExecuting导致无限循环

时间:2011-05-13 09:56:23

标签: asp.net-mvc-3 onactionexecuting

我有覆盖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);
    }
}

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

1 个答案:

答案 0 :(得分:3)

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