.NET6 MVC中如何正确将未认证用户路由至登录页面
解决未认证用户跳转Identity登录页的问题
首先要明确:Identity的登录页面是Razor Page,不是MVC视图,所以你用return View()跳转的方式本身就不对,应该用RedirectToPage方法来处理Area内的Page跳转。
正确的跳转写法
把你代码里的else分支改成:
return RedirectToPage("/Account/Login", new { area = "Identity" });
或者用完整的Page路径写法:
return RedirectToPage("/Areas/Identity/Pages/Account/Login");
更规范的实现方式
其实不需要手动写认证判断逻辑,直接给控制器或目标Action加上[Authorize]特性,ASP.NET会自动拦截未认证请求并跳转到登录页,代码更简洁规范:
using Microsoft.AspNetCore.Authorization; namespace ContactPro.Controllers { [Authorize] public class ContactsController : Controller { private readonly ApplicationDbContext _context; public ContactsController(ApplicationDbContext context) { _context = context; } public async Task<IActionResult> Index() { return View(await _context.Contacts.ToListAsync()); } } }
你之前路径错误的原因
- 混用加载方式:MVC视图和Razor Page是两种不同的文件类型,
return View()是用来加载MVC视图文件的,不能用来加载Razor Page。 - 路径层级错误:默认Identity登录页的位置是
Areas/Identity/Pages/Account/Login.cshtml,并不在Manage文件夹下,你之前的路径多了不必要的Manage层级。
内容的提问来源于stack exchange,提问作者hampden
相关产品推荐
相关产品推荐

