Мобильные службы: что делать, если строка запроса слишком длинная?

Благодаря автономной поддержке мобильных служб Azure я выполняю запрос PullAsync следующим образом:

// This list contains 53 emails
var deviceContactEmails = new List<string> { "[email protected]", "[email protected]", ... };
var query = _userTable.Where(x => deviceContactEmails.Contains(x.Email));
await _userTable.PullAsync(query);

Mobile Services SDK преобразует запрос в URL-закодированный GET-запрос с таким фильтром (это был список из 60 электронных писем, используемых для содержимого, но для краткости я вырезал большую часть середины):

https://rememberwhen.azure-mobile.net/tables/User?$filter=((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((email%20eq%20'carlin_jmecwrv_stulberg%40tfbnw.net')%20or%20(email%20eq%20'carlin_jmecwrv_stulberg%40tfbnw.net'))%20or%20(email%20eq%20'carlin_jmecwrv_stulberg%40tfbnw.net'))%20eq%20'carlin_jmecwrv_stulberg%40tfbnw.net'))%20or%20(email%20eq%20'carlin_jmecwrv_stulberg%40tfbnw.net'))&$skip=0&$top=50&__includeDeleted=true&__systemproperties=__createdAt%2C__version

Проблема в том, что если deviceContactEmails слишком длинный, служба будет жаловаться на длину строки запроса. Попытка отфильтровать такое количество элементов в URL-адресе является проблемой, поэтому мне нужно отфильтровать, передав элементы в теле запроса с помощью JSON или каким-либо другим способом.

Итак, я предполагаю, что вопрос заключается в следующем: как мне правильно настроить это с помощью Mobile Service SDK с автономной поддержкой, чтобы я мог избежать превышения ограничения на длину строки запроса в запросе с кодировкой URL?


person Community    schedule 02.12.2014    source источник
comment
Предел для операторов in в этом контексте довольно велик. Можете ли вы уточнить, сколько элементов находится в deviceContractEmails при сбое?   -  person Kirk Woll    schedule 02.12.2014
comment
Только 53. В ошибке упоминается, что я могу увеличить длину строки запроса, но это представляет угрозу безопасности.   -  person    schedule 02.12.2014
comment
Как длина строки запроса влияет на ваш код? Какой это код? Клиент-код? Серверный код? Я озадачен тем, как здесь может иметь значение длина строки запроса; ваш deviceContactEmails, по-видимому, создан на стороне сервера, и в этом случае эта ошибка будет отвлекающим маневром.   -  person Kirk Woll    schedule 02.12.2014
comment
Это клиентский код, который извлекает данные из Azure с помощью IMobileServiceSyncTable. deviceContactEmails — это список, созданный на стороне клиента. Проблема заключается в том, что запрос LINQ преобразуется в URL-кодированный GET, что приводит к тому, что строка запроса становится слишком длинной. Я обновляю вопрос с дополнительной информацией сейчас.   -  person    schedule 02.12.2014


Ответы (1)


Похоже, мне нужно создать собственный API для отправки списка электронных писем в качестве тела запроса. Я обновлю этот ответ и соглашусь, если решу его.

person Community    schedule 02.12.2014