3

我们试图通过使用 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 来处理动态数量的键值对?

4

1 回答 1

4

使用 WebOperationContext.Current 使我们能够获取原始查询字符串,现在将由我们自己解析。

于 2010-07-13T10:54:29.007 回答