我阅读了许多关于区域路由的帖子,但仍然无法解决我的问题。
我想将我的应用程序分成两个路由:
/Areas/Panel
/Areas/Website
每个区域内都有 HomeController
和相应的方法来对应操作。
我希望无论用户登陆到哪个一级路由:
- /home
- /contact
- /about/company
- 等等
都重定向到 /Areas/Website/{controller}/{action}
或者对于以下路由:
- /panel
- /panel/home
- /panel/users/2
- 等等
重定向到 /Areas/Panel/{controller}/{action}
我的当前 MVC 路由为:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
routes.MapRoute(
name: "area",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
});
但是它没有起作用,可能是因为我不完全理解如何告诉路由器使用Website
区域作为默认值。我在控制器之前尝试了各种指令,但没有起作用。
我能请教一下你的建议吗?
提前感谢你。
/Website/Home
时它可以工作,但是当我收到错误:InvalidOperationException: The view 'Index' was not found. The following locations were searched: /Views/Home/Index.cshtml /Views/Shared/Index.cshtml
。这很有道理,因为所需的视图不直接在项目中,而是在Website/Views中。我考虑过像template: "Areas/Website/{controller=Home}/{action=Index}/{id?}")
这样的东西,但这也不起作用。 - Greg WozniakareaName
,因为这似乎是我所缺少的,但不幸的是,我遇到了一个错误:Error CS1739 The best overload for 'MapRoute' does not have a parameter named 'areaName'
。所以问题似乎是如何指向default
声明的正确区域... - Greg WozniakMapRoute
更改为MapAreaRoute
(请参见我的答案)。 - NightOwl888