я не могу передать массив (массив int) в качестве параметра строки запроса клиенту RestSharp
var client = new RestClient(baseUrl);
client.Authenticator = new HttpBasicAuthenticator(username, password);
var request = new RestRequest(_endpoint, Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("contenttype", "application/json; charset=utf-8");
request.AddHeader("Accept", "text/html, application/xhtml+xml, image/jxr, */*");
//i tried with
request.AddParameter("messageIds", "[1,2,3]");
or
request.AddParameter("messageIds", new int[] {1,2,3} );
or
request.AddQueryParameter("messageIds", "[1,2,3]");
or
request.AddQueryParameter("messageIds", new int[] {1,2,3} );
я предполагаю, что проблема связана с UrlEncoding параметров
в случае, если я передаю значения с «новым int [] {1,2,3}» (как AddParameter, так и AddQueryParameter), URL-адрес строится следующим образом:
ResponseUri = {https://demo.xxxxxxxx.com:8181/ws/messages/zippedMessages?messageIds=System.Int32[]}
в случае, если я передаю значения в виде строки «[1,2,3]» (как AddParameter, так и AddQueryParameter), URL-адрес строится следующим образом:
ResponseUri = {https://demo.xxxxxxxx.com:8181/ws/messages/zippedMessages?messageIds=[1%2C2%2C3]}
вместо этого рабочий URL должен быть:
ResponseUri = {https://demo.xxxxxxxx.com:8181/ws/messages/zippedMessages?messageIds=%5B1,2,3%5D}
или по крайней мере:
ResponseUri = {https://demo.xxxxxxxx.com:8181/ws/messages/zippedMessages?messageIds=[1,2,3]}
метод «AddParameter» кодирует запятую, но не [ ] , если наоборот.
есть ли способ изменить это поведение? существует ли что-то вроде события PreExecute, где можно изменить символы? или какой-то другой обходной путь?
messageIds=a&messageIds=b&messageIds=c
. Я не использовал клиент RESTSharp, но можно ли просто добавлять идентификаторы сообщений несколько раз? - person Llama   schedule 07.04.2017Uri.EncodeDataString()
- person Llama   schedule 07.04.2017