2010-07-08 2 views
2
.

. Мы пытаемся передать переменное число пар ключ-значение нашей службе, используя атрибут WebGetAttribute и UriTemplate, чтобы открыть интерфейс REST. Что мы хотим сделать:WCF: как передать переменное количество параметров службе, включенной в WebGet.

[WebGet(UriTemplate="/Query/Select?{query}"] 
Response Query(string query); 

На стороне клиента мы хотим указать некоторые клавиши несколько раз, например:
HLLP: // локальный/MyService/Query/Выбор поля = Имя & fieldsort = возрастанию & поле ID =

Наш первый подход заключается в использовании следующей UriTemplate и разлагаться ключ-значение-пары вручную:

[WebGet(UriTemplate="/Query/{*query}"] 
ResponseQuery(string query); 

Bu т это только относится к сегментам и поэтому URL-адрес, как
HLLP: // локальный/MyService/Query/поле = Val% 3Due получить автоматически декодируется WCF и «поле = Val = уй» будет передан в Метод обслуживания.

Еще хуже, двойные закодированные URL, получить полностью декодируется, также:
HLLP: // локальной/MyService/Query/поле = Val% 253Due становится "поле = Val = уй" снова.

Есть ли способ доступа к строке необработанных запросов? Если нет, можем ли мы расширить/использовать UriTemplate по-другому, чтобы работать с динамическим числом пар ключ-значение?

+0

но как вы передаете эти параметры вашему методу обслуживания? – Nicolas

ответ

3

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

Смежные вопросы