WCF: как передать переменное число параметров службе с поддержкой WebGet - PullRequest
2 голосов
/ 08 июля 2010

Мы пытаемся передать переменное число пар ключ-значение нашему сервису, используя 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 другим способом, чтобы работать с динамическим числом пар ключ-значение?

1 Ответ

3 голосов
/ 13 июля 2010

Использование WebOperationContext.Current позволило нам получить необработанную строку запроса, которая теперь будет проанализирована нами.

...