【问题标题】:.net core razor pages multiple routing attributes.net core razor pages 多个路由属性
【发布时间】: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


【解决方案1】:

在一个 Razor 页面中不能有两个同名*的处理程序方法,不管参数声明有什么不同。处理程序方法不像 MVC 中的操作方法那样构成路由选择过程的一部分。

实现您想要的最佳方式是使用named handlers。然后,您可以选择是将处理程序方法的名称作为 URL 的一部分还是作为查询字符串值包含在内。

*您甚至无法通过将“Async”附加到一个来区分处理程序方法名称。就 Razor Pages 而言,OnGetOnGetAsync 是相同的。

【讨论】:

    猜你喜欢
    • 2019-07-05
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 2019-05-10
    • 2018-02-17
    • 2018-12-05
    • 2022-01-07
    相关资源
    最近更新 更多