我有一个routerlink:

导致"http://localhost:54614/api/v0.1/ReportData/Account"
我想做的是写一个Routerlink-这将导致

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

我怎样才能做到这一点 ?

最佳答案

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

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

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


将产生以下URL:/api/Campaign?%24top=20(请参见$被编码为%24

但是,使用非常非常肮脏的hack Uri.UnescapeDataString

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


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

关于c# - 将Odata查询参数添加到@ html.Routelink,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11004261/

10-13 01:58