如何控制URL参数在路线URL中的放置?

时间:2019-11-14 14:44:34

标签: asp.net-core routes razor-pages

假设我正在创建一个网站来显示客户订单。我想让页面显示:

  1. 客户列表,这使我可以深入了解...
  2. 给定客户的订单列表,这使我可以深入查看...
  3. 针对客户的特定订单的详细信息。

如果我创建一些Razor页面,则可能会具有以下结构:

[Pages] Index.cshtml [Customer] Index.cshtml [Order] Index.cshtml

顶层页面(客户列表)没有参数,因此该URL仅为/

客户页面(客户的订单列表)需要一个客户ID,因此我可以将@page "{customerId}放在.cshtml文件的顶部。这样它的URL将为/Customer/123

到目前为止,太好了。该网址很有意义。

现在进入订单详细信息页面。这需要一个订单号,因此我们将@page "{orderNo}"放在.cshtml文件的顶部。其URL为... /Customer/Order/54321。嗯...我已经从网址中丢失了客户ID。

我可以通过使@page伪指令包含它(@page "{customerId}/{orderNo}")来重新添加客户ID,但是URL为/Customer/Order/123/54321-看起来不太好。

我如何使URL看起来像/Customer/123/Order/54321

1 个答案:

答案 0 :(得分:1)

您可以使用override route template来抵消框架生成的基于路径的路由。替代路由以前导mscomctl.ocx开头。在您的示例中,解决方案是:

/

请注意,这样做的好处是在站点结构发生更改时保持鲁棒性。例如,您将来可能会决定将 Order 文件夹嵌套在 Customer 文件夹中会阻止发现,但是替代路由将确保在同一页面上找到该页面。 URL,无论您将源文件移动到 Pages 文件夹内的位置。