You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Authorize后登录循环,无法跳转至HomeController求助

解决ASP.NET MVC登录循环问题

我帮你分析下问题所在,你遇到的登录循环问题主要是因为BaseController里的授权逻辑没有正确中断请求,再加上和[Authorize]特性的双重检查冲突导致的。

问题根源

  1. BaseController的OnActionExecuting方法错误:当Session["UserId"]为空时,你调用了RedirectToAction,但没有把这个重定向结果赋值给filterContext.Result。这意味着MVC框架不会执行这个重定向,原请求会继续往下走。而HomeController带有[Authorize]特性,框架检测到未授权,就会再次重定向到Login页面,形成循环。
  2. 双重授权检查冲突:你同时使用了自定义的BaseController授权逻辑和[Authorize]特性,两者的逻辑叠加导致了重定向的循环。

修复步骤

1. 修正BaseController的授权逻辑

修改BaseController的OnActionExecuting方法,确保在需要重定向时,将结果赋值给filterContext.Result,并且排除Login动作本身,防止无限循环:

public class BaseController : Controller
{
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // 检查当前是否是Login动作,避免拦截登录请求
        bool isLoginRequest = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName.Equals("Login", StringComparison.OrdinalIgnoreCase) &&
                              filterContext.ActionDescriptor.ActionName.Equals("Login", StringComparison.OrdinalIgnoreCase);

        if (Session["UserId"] == null && !isLoginRequest)
        {
            // 必须将重定向结果赋值给filterContext.Result,才能中断原请求
            filterContext.Result = RedirectToAction("Login", "Login");
            return;
        }

        base.OnActionExecuting(filterContext);
    }
}

2. 移除HomeController的[Authorize]特性

因为BaseController已经统一处理了授权检查,HomeController不需要再添加[Authorize],避免双重检查冲突:

public class HomeController : BaseController 
{
    public ActionResult Index() 
    {
        return View(); 
    }
}

3. 确保Login的GET方法允许匿名访问

给Login的HttpGet方法添加[AllowAnonymous]特性,防止被BaseController的逻辑误拦截:

[AllowAnonymous]
[HttpGet] 
public ActionResult Login() 
{ 
    return View(); 
}

原理说明

  • 设置filterContext.Result后,MVC框架会放弃原请求的执行,转而执行你指定的重定向结果,这样就不会触发[Authorize]特性的重定向了。
  • 排除Login动作的检查,是为了避免在重定向到Login页面时,再次被BaseController拦截,导致无限循环。

内容的提问来源于stack exchange,提问作者Sagar padhiyar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:33:14