"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.
);
}
我知道以前有人弹出过这个错误,但这似乎有点特殊。
我一直致力于在 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.
);
}