我有一个控制器,它提供带有key
列的"静态页面",允许输入URL。例如,http://hostname/about
应该路由到名为StaticPages
的控制器和任何其他不链接到控制器的URL(有或没有操作(。
其目的是使路线按以下顺序工作:
- 区域路线
- 控制器路线(有/无动作(
- 默认路由-通过
StaticPages
控制器进行静态页面查找
我配置了以下路由,但我无法实现上述配置。
如果我导航到一个静态页面(即/about
(,这是有效的,但是如果我在没有指定操作的情况下导航到控制器(如/blog
(,我会得到一个404,这表明它跳过到底部路由模式。如果我使用控制器和操作(即/blog/index
(,它可以正常工作,所以它似乎在期待一个操作,我宁愿默认设置为index
。
app.UseEndpoints(endpoints =>
{
endpoints.MapAreaControllerRoute(
"admin-area",
"admin",
"admin/{controller}/{action}/{Id?}");
endpoints.MapControllerRoute(
name: "admin-users",
pattern: "admin/users/{action=Index}/{Id?}",
defaults: new { controller = "UserAdmin", action = "Index" });
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "StaticPage-Default",
pattern: "{key}",
defaults: new { controller = "StaticPages", action = "Details" });
endpoints.MapRazorPages();
});
如何获得所描述的配置?
似乎,将顶部的管理部分转换为一个区域(正确地-我没有正确地配置(,并用以下代码替换代码,使我能够实现所需的行为,尽管我不完全确定为什么。
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "admin-area",
pattern: "{area:exists}/{controller=Dashboard}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "StaticPage-Default",
pattern: "{key}",
defaults: new { controller = "StaticPages", action = "Details" });
endpoints.MapRazorPages();
});