Asp.net mvc 3 ASP.NET MVC 3 OnActionExecuting导致无限循环
我已经重写了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正确更改
为什么-如果用户未登录-响应将再次重定向到该方法。为什么?这可能是因为您重定向到的控制器操作(我想是登录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);
}
}