Мы пытаемся передать переменное число пар ключ-значение нашему сервису, используя WebGetAttribute и UriTemplate для предоставления интерфейса REST. Что мы хотим сделать:
[WebGet(UriTemplate="/Query/Select?{query}"]
Response Query(string query);
На стороне клиента мы хотим указать несколько ключей несколько раз, например ::10000
HLLP: // локальный / MyService / Query / Выбор поля = Имя & fieldsort = Asc и поле = ID
Нашим первым подходом было использование следующего UriTemplate и разложение пар ключ-значение вручную:
[WebGet(UriTemplate="/Query/{*query}"]
ResponseQuery(string query);
Но это относится только к сегментам и таким URL-адресам, как
HLLP: // локальный / MyService / Query / поле = Val% 3Due
автоматически расшифровывается WCF, и «field = Val = ue» будет передано методу Service.
Что еще хуже, URL-адреса с двойным кодированием также полностью декодируются:
HLLP: // локальный / MyService / Запрос / поля = Вал% 253Due
снова становится "field = Val = ue".
Есть ли способ получить доступ к необработанной строке запроса? Если нет, можем ли мы расширить / использовать UriTemplate другим способом, чтобы работать с динамическим числом пар ключ-значение?