[英]How can I configure ASP.NET Core routing to route to controllers (without optional action) if they exist, then fall back to a default route?
我有一个控制器,它提供带有允许输入 URL 的key
列的“静态页面”。 例如, 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();
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.