Razor Pages 路由仅使用一个参数,而不是两个

Razor Pages routing only working with one parameter, not two

我有一个显示杂货的 ASP.NET Core 3.1 Razor Pages 网站。有一个名为 Shop 的区域,其中包含一个名为 Product.cshtml 的 Razor 页面。此页面中没有任何路由设置,只有普通的 @page 指令,行上没有其他任何内容。

页面中的OnGet方法有几个参数,包括两个字符串参数categorysection...

public async Task<IActionResult> OnGet(string currentFilter,
                                       string section,
                                       string category,
                                       string searchAreaID,
                                       string so, int ps, int p = 1)

如果我浏览到 /Shop/Product?category=Bakery/Shop/Product?category=Bakery&section=Bread 一切正常。

我想做的是改用 /Shop/Product/Bakery/Shop/Product/Bakery/Bread 这样的 URL。

我在 Startup.cs 中添加了如下路线...

.AddRazorPagesOptions(options => {
  options.Conventions.AddAreaPageRoute("Shop", "/Product", "/Shop/Product/{category}/{section}");
  options.Conventions.AddAreaPageRoute("Shop", "/Product", "/Shop/Product/{category}");
  // other routes set here (none relating to the above)
})

这允许我使用上面显示的 URL 进行浏览,但是当我使用标签助手生成链接时,URL 并不总是正确显示。例如,我有以下标记生成 parent/child 组 <ul>,这些标记用 CSS(为清楚起见省略)...

<ul>
  @foreach (Category category in Model.Categories) {
    <li>
      <a asp-area="Shop"
         asp-page="/Product" 
         asp-route-category="@category.Name">@category.Name</a>
      <ul>
        <li>
          <ul>
            @foreach (Section sub in category.Sections) {
              <li><a asp-area="Shop"
                 asp-page="/Product"
                 asp-route-category="@category.Name" 
                 asp-route-section="@sub.Name">@sub.Name</a></li>
            }
          </ul>
        </li>
      </ul>
    </li>
  }
</ul>

顶级链接中的URL是正确的,格式为/Shop/Product/Bakery,但二级链接中没有使用路由中的部分名称,而是将它们添加到查询字符串,例如 /Shop/Product/Bakery?section=Bread

有人知道我在这里做错了什么吗?如果我还需要包含任何内容,请告诉我。

您可以这样设置页面路由:

.AddRazorPagesOptions(options => {
    options.Conventions.AddAreaPageRoute("Shop", "/Product", "/Shop/Product/{category?}/{section?}");
});

生成url