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 を拡張/使用して、動的な数のキーと値のペアを操作できますか?