【问题标题】:"No route in the route table matches the supplied values" when using Areas使用区域时“路由表中没有与提供的值匹配的路由”
【发布时间】:2015-06-18 05:08:30
【问题描述】:

我知道以前有人出现过这个错误,但这似乎是一个特殊情况。

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

我用于此 SPA 的路线是 /V2/Home。所以我有一个名为“V2”的区域,该区域中有一个名为“HomeController”的 MVC 控制器,它有一个名为“Index”的视图。我在 V2AreaRegistration 中设置了一个包罗万象。

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

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

【问题讨论】:

  • 您的主站点中是否也有 HomeController?如果是这样,您需要在此处使用 MapRoute 的命名空间参数指定要使用的命名空间,否则 MVC 将不知道要使用哪个“HomeController”。要么这样,要么将名称更改为 V2HomeController 或类似的名称。
  • 对您计算机上的另一个文件夹进行干净的签出并尝试运行该站点,或使用 WinMerge 之类的工具来比较目录。
  • @TiesonT。我已经这样做了,它在我的机器上仍然可以正常工作
  • @ErikFunkenbusch 据我所知,项目中没有其他 HomeController。
  • ReactJS 路由用什么?您是否尝试过将您的路线更改为完整的V2/{controller}/{action}/{id}

标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing asp.net-mvc-areas


【解决方案1】:

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

【讨论】:

  • 你用授权属性装饰索引了吗?还是身份验证过滤器?
  • @DaveAlperovich 身份验证过滤器。还有一个自定义属性,不过我现在不在代码前面。
【解决方案2】:

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

您的区域注册似乎不知道您的控制器所在的命名空间。尝试在声明新控制器命名空间的 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.
   );
}

【讨论】:

  • 我确实有命名空间。我想这一切现在都想通了。谢谢
猜你喜欢
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多