ASP.NET Core 5 MVC 登录成功后如何重定向至Area区域内的视图
解决Area重定向路径错误方案
第一步:确认Area路由已正确注册
这是最常见的报错原因,路由配置未正确识别Area参数,无法将area参数转换为路径前缀。
针对ASP.NET Core 6+(Program.cs)
路由配置要优先匹配Area规则,示例如下:
var builder = WebApplication.CreateBuilder(args); // 添加控制器服务 builder.Services.AddControllersWithViews(); var app = builder.Build(); // 中间件配置略... app.UseRouting(); // 先注册Area路由,再注册默认路由 app.MapControllerRoute( name: "areas", pattern: "{area:exists}/{controller=Home}/{action=Dashboard}/{id?}"); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
针对ASP.NET MVC 5(.NET Framework)
确保Global.asax.cs中先调用AreaRegistration.RegisterAllAreas(),再注册全局路由:
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); // 必须放在路由注册之前 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); }
第二步:使用正确的重定向写法
路由配置正确的前提下,你写的第一种写法本身参数规则是正确的:
return RedirectToAction("Dashboard", "Home", new { Area = "StaffAug"});
如果存在根目录下HomeController和Area内HomeController重名冲突的情况,需要在Area注册时指定命名空间,并关闭命名空间回退,也可以直接使用RedirectToRoute明确指定Area路由,避免歧义:
return RedirectToRoute("areas", new { area = "StaffAug", controller = "Home", action = "Dashboard" });
可选:属性路由显式指定路径
如果不想依赖全局路由配置,可以直接给Area内的控制器加属性路由,优先级高于全局路由:
[Area("StaffAug")] [Route("StaffAug/[controller]/[action]")] // 显式指定路径前缀 public class HomeController : Controller { private readonly ILogger<HomeController> _logger; public HomeController(ILogger<HomeController> logger) { _logger = logger; } public IActionResult Dashboard() { return View(); } }
内容的提问来源于stack exchange,提问作者Mohan Raju
相关产品推荐
相关产品推荐

