将 Odata 查询参数添加到@html.路由链接

本文关键字:@html 路由 链接 添加 Odata 查询 参数 | 更新日期: 2023-09-27 18:36:53

我有一个路由链接

@Html.RouteLink("Campaigns", "DefaultApi", new { controller = "Campaign", httproute = true })

这会导致"http://localhost:54614/api/v0.1/ReportData/Account"

我想做的是编写一个路由链接 - 这将导致

"http://localhost:54614/api/v0.1/ReportData/Account/?$top=20"

我该怎么做?

将 Odata 查询参数添加到@html.路由链接

不能将$top用作匿名类型的属性名称,因此您应该使用使用 RouteValueDictionary 的不同Routelink重载。

但问题是RouteLink使用Uri.EscapeUriString来转义路由值,因此使用以下代码:

@Html.RouteLink("Campaigns", "DefaultApi", new RouteValueDictionary
                                              {
                                                  { "controller", "Campaign"} ,
                                                  { "httproute", true },
                                                  { "$top", 20 }
                                              })

将生成此网址:/api/Campaign?%24top=20(请参阅$被编码为%24

但是使用一个非常非常肮脏的黑客,即Uri.UnescapeDataString

@Html.Raw(Uri.UnescapeDataString(
    @Html.RouteLink("Campaigns", "DefaultApi", new RouteValueDictionary
                                        {
                                            { "controller", "Campaign"} ,
                                            { "httproute", true },
                                            { "$top", 20 }
                                        }).ToHtmlString()))

您可以获得: /api/Campaign?$top=20