【发布时间】:2020-10-23 09:35:45
【问题描述】:
我有一个带有多个 GET 参数绑定的 JobPosts/Index 页面以允许过滤:我们以 CityId 和 IsRemote 为例。我不希望这些作为查询字符串参数传递,而是我想为它们使用友好的路由。所以我定义了这些:
options.Conventions.AddPageRoute("/JobPosts/Index", "cities/{cityId}/jobs");
options.Conventions.AddPageRoute("/JobPosts/Index", "remote-jobs");
options.Conventions.AddPageRoute("/JobPosts/Index", "jobs");
当我在浏览器中键入它们并且CityId 绑定正确时,路由工作得很好,但是缺少两件事。
首先,无法为我的IsRemote 参数指定默认值,我想在使用remote-jobs URL 时将其设置为true ONLY。
其次,在尝试生成这样的 URL 时:
<a asp-area="" asp-page="/JobPosts/Index" asp-route-cityId="@Model.CityId"></a>
我得到以下网址:
https://localhost:44391/jobs?cityId=2265885
当我真正期望的是:
https://localhost:44391/cities/2265885/jobs
所以看起来标签助手或负责构建 URL 的部分根本没有查看不同的路由来尝试根据参数列表获得最佳匹配。实际上,它将始终使用为该页面定义的最后一页路由。
我也无法在任何地方为页面路由指定路由名称,然后使用asp-route 明确说出我想要的路由。
任何想法如何实现这一目标?或者,如果这是 Razor Pages 路线图上的内容?
编辑: 硬编码href 不是一种选择。我希望这通过正确的路由服务,因为还有其他事情要做,比如为非英语用户生成特定于文化的 URL(例如{cultureId}/cities/{cityId}/jobs - 这是通过路由约定完成的。硬编码@987654335 @ 显然会绕过它。
【问题讨论】: