我们试图通过使用 WebGetAttribute 和 UriTemplate 来公开 REST 接口,将可变数量的键值对传递给我们的服务。我们想做的事:
[WebGet(UriTemplate="/Query/Select?{query}"]
Response Query(string query);
在客户端,我们想多次指定一些键,例如:
hllp://localhost/MyService/Query/Select?field=Name&fieldsort=asc&field=ID
我们的第一种方法是使用以下 UriTemplate 并手动分解键值对:
[WebGet(UriTemplate="/Query/{*query}"]
ResponseQuery(string query);
但这仅适用于段,因此诸如
hllp://localhost/MyService/Query/field=Val%3Due 之类的 URL
会被 WCF 自动解码,并且“field=Val=ue”将被传递给 Service 方法。
更糟糕的是,双重编码的 URL 也会被完全解码:
hllp://localhost/MyService/Query/field=Val%253Due 再次
变为“field=Val=ue”。
有什么办法可以访问原始查询字符串?如果不是,我们能否以另一种方式扩展/使用 UriTemplate 来处理动态数量的键值对?