【发布时间】:2019-03-25 07:20:31
【问题描述】:
我正在使用剃须刀页面(不是视图/控制器),我的目标是为同一页面构建以下两条路由:
- /GetItem{id:int}
- /GetItem{title:string}
它们应该导致两个不同的“操作”OnGetAsync(int id) 和 OnGetAsync(string title)。
最初,我想在 PageModel 中使用路由属性,但得出结论认为 RazorPages PageModel 不支持它们 - 对吗?现在我正在尝试使用@page 指令来实现这一目标,但没有找到任何东西。我不想使用路由“配置设置”,因为我想让我的路由本地到使用它们的页面。
解决这个问题的正确方法是什么?
感谢您消除了我的困惑!
【问题讨论】:
-
是的,这是一种从 Startup 类中实现的方法。
-
是的,但这正是我不想要的。属性很好,@page 很好,但我不想在 Startup.cs 中这样做。
-
然后使用约束
@page "{id:int}" -
ASP.NET Core 完全是关于“约定优于配置”。有一种简单的方法来做事,但是有一些选项可以解决内置的约定。在
RazorPagesOptions.Conventions中内置了支持约定外路由的方式,可以在Startup.cs中进行配置。否则,您将不得不做一些事情,例如让您的PageModel.OnGet()手动检查字符串或 int,并相应地进行路由。 -
对,没有路由属性。只有
@page指令。它实际上是一个非常强大的指令。您每页只能使用一次,但看起来您可以将 2 个不同的页面映射到同一条路线,但这仍然无助于您的问题。
标签: c# razor-pages asp.net-core-2.1