我们试图通过使用WebGetAttribute和UriTemplate公开REST接口,将可变数量的键值对传递给我们的服务。我们想做什么:
[WebGet(UriTemplate="/Query/Select?{query}"]
Response Query(string query);
在客户端,我们想要多次指定一些密钥,例如: 的 hllp://本地主机/为MyService /查询/选择字段=名称&安培; fieldsort = ASC&安培;字段= ID
我们的第一种方法是使用以下UriTemplate并手动分解键值对:
[WebGet(UriTemplate="/Query/{*query}"]
ResponseQuery(string query);
但这仅适用于细分以及如此的网址 的 hllp://本地主机/为MyService /查询/字段=缬氨酸%3Due 由WCF自动解码,“field = Val = ue”将传递给Service方法。
更糟糕的是,双重编码的URL也得到了完全解码:
的 hllp://本地主机/为MyService /查询/字段=缬氨酸%253Due
再次成为“field = Val = ue”。
有没有办法访问原始查询字符串?如果没有,我们可以用另一种方式扩展/使用UriTemplate,使用动态数量的键值对吗?
答案 0 :(得分:3)
使用WebOperationContext.Current使我们能够获取原始查询字符串,现在将由我们自己解析。