如何控制 URL 参数在我的路由 URL 中的位置?
How can I control the placement of URL parameters in my route URL?
假设我正在创建一个网站来显示客户订单。我想让页面显示:
- 一个客户列表,让我可以深入了解...
- 给定客户的订单列表,让我可以深入了解...
- 客户特定订单的详细信息。
如果我创建几个 Razor 页面,我可能会得到以下结构:
[Pages]
Index.cshtml
[Customer]
Index.cshtml
[Order]
Index.cshtml
顶级页面(客户列表)没有参数,因此 URL 只是 /
。
客户页面(客户的订单列表)需要客户 ID,因此我可以将 @page "{customerId}
放在 .cshtml 文件的顶部。 URL 将变为 /Customer/123
。
到目前为止,还不错。 URL 有道理。
现在进入订单详情页面。这需要一个订单号,所以让我们将 @page "{orderNo}"
放在 .cshtml 文件的顶部。它的 URL 是... /Customer/Order/54321
。嗯...我丢失了来自 URL 的客户 ID。
我可以通过使 @page
指令包含它 (@page "{customerId}/{orderNo}"
) 来重新添加客户 ID,但是 URL 是 /Customer/Order/123/54321
- 这不不好看
如何让 URL 看起来像 /Customer/123/Order/54321
?
您可以使用 override route template 来否定框架生成的基于路径的路由。覆盖路由以前导 /
开头。在您的示例中,解决方案是:
@page "/Customer/{customerid}/Order/{orderid}"
请注意,这样做的好处是在面对网站结构的变化时保持稳健。例如,您将来可能会决定将 Order 文件夹嵌套在 Customer 文件夹中会妨碍发现,但覆盖路由将确保无论您将源文件移动到 Pages 文件夹中的哪个位置,页面都位于相同的 URL。
假设我正在创建一个网站来显示客户订单。我想让页面显示:
- 一个客户列表,让我可以深入了解...
- 给定客户的订单列表,让我可以深入了解...
- 客户特定订单的详细信息。
如果我创建几个 Razor 页面,我可能会得到以下结构:
[Pages]
Index.cshtml
[Customer]
Index.cshtml
[Order]
Index.cshtml
顶级页面(客户列表)没有参数,因此 URL 只是 /
。
客户页面(客户的订单列表)需要客户 ID,因此我可以将 @page "{customerId}
放在 .cshtml 文件的顶部。 URL 将变为 /Customer/123
。
到目前为止,还不错。 URL 有道理。
现在进入订单详情页面。这需要一个订单号,所以让我们将 @page "{orderNo}"
放在 .cshtml 文件的顶部。它的 URL 是... /Customer/Order/54321
。嗯...我丢失了来自 URL 的客户 ID。
我可以通过使 @page
指令包含它 (@page "{customerId}/{orderNo}"
) 来重新添加客户 ID,但是 URL 是 /Customer/Order/123/54321
- 这不不好看
如何让 URL 看起来像 /Customer/123/Order/54321
?
您可以使用 override route template 来否定框架生成的基于路径的路由。覆盖路由以前导 /
开头。在您的示例中,解决方案是:
@page "/Customer/{customerid}/Order/{orderid}"
请注意,这样做的好处是在面对网站结构的变化时保持稳健。例如,您将来可能会决定将 Order 文件夹嵌套在 Customer 文件夹中会妨碍发现,但覆盖路由将确保无论您将源文件移动到 Pages 文件夹中的哪个位置,页面都位于相同的 URL。