ASP.NET Core 7匿名控制器方法重定向Account/Login视图异常问题
ASP.NET Core 登录状态判断重定向问题解决
1. 先解决代码里的死代码问题
你的else块里写了一堆return语句,但程序执行到第一个return RedirectToAction("Login", "Account");就会直接终止方法执行,后面的所有重定向代码完全不会被运行——这就是你测试多种写法都没效果的核心原因,因为那些写法根本没被执行过。
2. 正确指定Identity区域的重定向路径
ASP.NET Core Identity的Account控制器默认是放在Identity区域下的,手动重定向时必须明确指定区域参数,否则MVC会在根区域找Account控制器,自然找不到对应页面。
修正后的完整Index方法
public IActionResult Index() { if (_userManager.IsSignedIn(User)) { return RedirectToAction("MyDetails", "SupAdmin"); } else { // 正确指向Identity区域的Account/Login return RedirectToAction("Login", "Account", new { area = "Identity" }); } }
3. 检查路由配置是否正确
如果还是无法跳转,确认你的Program.cs(或旧版的Startup.cs)里配置了区域路由支持:
// 启用Razor Pages路由(Identity依赖这个) app.MapRazorPages(); // 配置MVC区域路由 app.MapControllerRoute( name: "areas", pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"); // 默认根路由 app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
4. 为什么加[Authorize]就能正常跳转?
当你给方法加上[Authorize]属性时,ASP.NET Core的授权中间件会自动读取Identity配置中的默认登录路径(默认就是/Identity/Account/Login),并自动处理区域和路径的匹配,不需要你手动写重定向,所以能正常跳转到登录页。
内容的提问来源于stack exchange,提问作者Shafiq Hussain
相关产品推荐
相关产品推荐

