使用区域时,“路由表中的路由与提供的值不匹配”

时间:2015-04-12 23:50:38

标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing asp.net-mvc-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" }
   );
}

这里是Global.asax.cs中的Application_Start

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(); 
}

我完全无处可去。我很乐意解决这个问题。随意询问任何遗漏。

2 个答案:

答案 0 :(得分:2)

我不确定它究竟是什么,但我设法解决了我的问题。它与我们如何处理路由和身份验证/权限有关。

答案 1 :(得分:1)

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

看起来您的区域注册不知道控制器所在的命名空间。尝试在MapRoute方法调用中添加第4个参数,以声明新控制器的命名空间:

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.
   );
}