2

I have a routelink :

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

that results in "http://localhost:54614/api/v0.1/ReportData/Account"

what I want to do is write a Routelink - that would result in

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

How can I do that ?

4

1 回答 1

1

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

但问题是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

于 2012-06-12T20:31:34.130 回答