"No route in the route table matches the supplied values" 使用区域时

"No route in the route table matches the supplied values" when using Areas

我知道以前有人弹出过这个错误,但这似乎有点特殊。

我一直致力于在 ASP.NET MVC 4 之上使用 ReactJS 设置一个 SPA。我在我的机器上运行没有任何问题。但是,我看到的奇怪问题是它不适用于其他开发人员的任何其他机器。据我所知,我没有任何未在源代码管理下签入的文件。我已经使用了 RouteDebugger,我看到了正确的路由被捕获。

我为这个 SPA 使用的路线是 /V2/Home。所以我有一个名为 "V2" 的区域,一个名为 "HomeController" 的区域中的 MVC 控制器,它有一个名为 "Index" 的视图。我在 V2AreaRegistration 中设置了一个 catchall。

public override void RegisterArea(AreaRegistrationContext context)
{
   context.MapRoute(
       "V2_default",
       "V2/{*url}",
       new { area = "V2", controller = "Home", action = "Index" }
   );
}

Application_Start Global.asax.cs

protected void Application_Start()
{   
    AreaRegistration.RegisterAllAreas();

    GlobalConfiguration.Configure(WebApiConfig.Register);           
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
    AuthConfig.RegisterAuth();

    AutoMapperConfiguration.Configure();
    Logger.Info("Application started");

    GlobalConfiguration.Configuration.EnsureInitialized(); 
}

我对此一无所知。我很想解决这个问题。如有任何遗漏,请随时提出。

我不确定它到底是什么,但我设法解决了我的问题。这与我们处理路由和 authentication/permissions 的方式有关。

我无法解释这在你的机器上如何工作,但在你同事的机器上却不行。

您的区域注册似乎不知道您的控制器所在的名称空间。尝试向 MapRoute 方法调用添加第四个参数,以声明您的新控制器的名称空间:

public override void RegisterArea(AreaRegistrationContext context)
{
   context.MapRoute(
       "V2_default",
       "V2/{*url}",
       new { area = "V2", controller = "Home", action = "Index" },
       new string[] { "MyApplication.MyMvcProject.Areas.Controllers" } // Change this to the namespace of your area controllers.
   );
}