2013-06-26 2 views
2

У меня возникают проблемы с POST-запросами с RestSharp. Мой параметр «Параметр» Hashtable содержит пары ключ-значение, которые должны быть отправлены на сервер. Я попробовал несколько комбинаций и получил странный вывод на стороне сервера.Использование объекта Hashtable в качестве тела/параметра для запроса POST (RestSharp в Xamarin Mono)

Пример 1:

var client = new RestClient(); 
var request = new RestRequest(url, Method.POST); 
request.RequestFormat = DataFormat.Json; 
request.AddBody (param); 

Выход:

Parameters: {"_json"=>[{"Key"=>"customer_subject_id", "Value"=>"300"}, {"Key"=>"client_code", "Value"=>"337"}, {"Key"=>"reservation_id", "Value"=>"9798"}, {"Key"=>"guid", "Value"=>"ODUUME4qhLmAcBVGlT4mrGbaHcbuXZID"}, {"Key"=>"customer_client_subject_id", "Value"=>"300"}, {"Key"=>"exam_code", "Value"=>"300"}, {"Key"=>"signature", "Value"=>"6bcbffb0c8ddcd89f159cf5ddd485d1eed76d1694ba329db5431f883bac3e982"}, {"Key"=>"customer_id", "Value"=>"lol"}, {"Key"=>"session_duration", "Value"=>60}]} 

Пример 2:

var client = new RestClient(); 
var request = new RestRequest(url, Method.POST); 
foreach(DictionaryEntry entry in param){ 
request.RequestFormat = DataFormat.Json; 
request.AddParameter ((entry.Key.ToString()), entry.Value); 
} 

Выход:

Parameters: {"customer_subject_id"=>"300", "client_code"=>"337", "reservation_id"=>"9798", "guid"=>"o9LJ5e9t52xxFhxhAoHzmYd7AiQ3nu36", "customer_client_subject_id"=>"300", "exam_code"=>"300", "signature"=>"297cd7e871df885393ebe44b262cb40b8c03e55ae1f0567ff708e9811b2aedf8", "customer_id"=>"lol", "session_duration"=>"60"} 

Выход для # 2 кажется правильным, но я получаю 401 на стороне сервера. Как ни странно, выход GET совпадает с результатом №2, но запрос выполнен успешно. Я думаю, проблема может заключаться в том, что в целом запрос содержит 10 параметров, но он должен размещать одну строку в формате JSON в теле. Как правило, я бы поставить JSON, отформатированную строку в теле, но даже когда я использую автономный JSON сериализатор для получения JSON строку в Hashtable и положить в AddBody, я получаю следующее:

Пример 3:

var client = new RestClient(); 
var request = new RestRequest(url, Method.POST); 
String paramJson = SimpleJson.SerializeObject (param); 
request.RequestFormat = DataFormat.Json; 
request.AddBody (paramJson); 

Выход:

Parameters: {"_json"=>"[{\"Key\":\"customer_subject_id\",\"Value\":\"300\"},{\"Key\":\"client_code\",\"Value\":\"337\"},{\"Key\":\"reservation_id\",\"Value\":\"9798\"},{\"Key\":\"guid\",\"Value\":\"56ZAsFtBx7jhDmdconWTb40qGirNagxK\"},{\"Key\":\"customer_client_subject_id\",\"Value\":\"300\"},{\"Key\":\"exam_code\",\"Value\":\"300\"},{\"Key\":\"signature\",\"Value\":\"57d7c878dec24da98815071d1dc3730873285b3ae65f9d98591da94266b8f7d7\"},{\"Key\":\"customer_id\",\"Value\":\"lol\"},{\"Key\":\"session_duration\",\"Value\":60}]"} 

я в основном любопытно, почему строка JSON, что RestSharp создает содержит "_json" в начале.

Спасибо, Джон

+0

эй Джон вам удалось решить эту проблему? 660 человек пришли к этому вопросу, ища ответ :) – BKSpurgeon

ответ

1

Является ли ваш сервер работает Rails? Возможно, это актуально https://groups.google.com/forum/#!topic/rubyonrails-core/ZYBI_XHYpak

Если у вас есть контроль над серверной частью, возможно, лучше использовать AddParameter и передать строку JSON, которую вы можете проанализировать на стороне сервера.

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