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

Asp.net mvc 3 ASP.NET MVC 3 OnActionExecuting导致无限循环,asp.net-mvc-3,onactionexecuting,Asp.net Mvc 3,Onactionexecuting,我已经重写了OnActionExecuting方法(如果用户登录,则在执行操作之前检查) 为什么-如果用户未登录-响应将再次重定向到该方法。为什么?这可能是因为您重定向到的控制器操作(我想是登录url)也用此属性修饰。因此,如果用户没有经过身份验证,他将被重定向到登录操作,并且由于他没有经过身份验证,他将被重定向到登录操作,依此类推。就个人而言,我建议您使用[Authorize]属性,而不是编写这样的操作筛选器。但是如果我在控制器上使用[Authorize]属性,结果是一个空白页(URL正确更改

我已经重写了OnActionExecuting方法(如果用户登录,则在执行操作之前检查)


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

这可能是因为您重定向到的控制器操作(我想是登录url)也用此属性修饰。因此,如果用户没有经过身份验证,他将被重定向到登录操作,并且由于他没有经过身份验证,他将被重定向到登录操作,依此类推。就个人而言,我建议您使用
[Authorize]
属性,而不是编写这样的操作筛选器。

但是如果我在控制器上使用[Authorize]属性,结果是一个空白页(URL正确更改)@Tony,authorize属性将自动重定向到您在web.config的
部分中定义的登录页面。因此,请确保此处定义的url对应于应用程序中的实际控制器操作。
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);
    }
}