Проблема при передаче значений HashTable как веб-запроса с использованием метода Post - PullRequest
0 голосов
/ 02 августа 2011

Я разрабатываю веб-форму в asp.net, используя C # для публикации некоторых данных на другом сайте. У меня возникла проблема при передаче данных, хранящихся в хэш-таблице, с помощью StreamWriter. Ниже приведен фрагмент кода, который я использую для хранения данных в HashTable и отправки на другой сайт с помощью HttpWebRequest. 1) // Хеш-таблица для хранения данных

Hashtable
post_parameters = new Hashtable(); 
post_parameters.Add("format", "atom");
post_parameters.Add("user[first_name]", "ABC"); 
post_parameters.Add("user[last_name]", "XYZ"); 
post_parameters.Add("client_id", "1111111"); 
post_parameters.Add("user[salutation]", "Mr."); 
post_parameters.Add("user[account_attributes][addresses_attributes][0][street]", "Street"); 
post_parameters.Add("user[account_attributes][addresses_attributes][0][street2]", "Street2"); 
post_parameters.Add("user[account_attributes][addresses_attributes][0][city]", "New York");
post_parameters.Add("user[account_attributes][addresses_attributes][0][state]", "NY"); 
post_parameters.Add("user[account_attributes][addresses_attributes][0][postal_code]", "10017"); 
post_parameters.Add("user[account_attributes][addresses_attributes][0][country_code]", "US"); 
post_parameters.Add("user[mapbuzz_auth_attributes][email]", abc.xyz@xyz.com); 
post_parameters.Add("user[employee_attributes][position]", "Consultant"); 
post_parameters.Add("user[employee_attributes][company_attributes][name]", "XYZ");

2) // Метод отправки данных с использованием HttpWebRequest

Uri uri = new Uri(http://www.xyz.com/user + "?" + query_string); 
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
request.Method = WebRequestMethods.Http.Post;
request.ContentType = 
"application/x-www-form-urlencoded"; 
StreamWriter writer = new StreamWriter(request.GetRequestStream()); 
writer.Write(post_parameter);
writer.Close();
HttpWebResponse
response = (HttpWebResponse)request.GetResponse(); 
StreamReader reader = new StreamReader(response.GetResponseStream()); 
string tmp = reader.ReadToEnd(); 
response.Close();
Response.Write(tmp);

Проблема:

Я получаю ответ как «422 необработанный объект» для передачи HashTable в качестве параметра. Пожалуйста, предоставьте помощь по этому вопросу и дайте мне знать, как передать Hashtable как веб-запрос.

Ответы [ 2 ]

1 голос
/ 02 августа 2011

Из статьи вики о HTTP POST можно прочитать следующее

Когда веб-браузер отправляет запрос POST от элемента веб-формы, стандартный тип мультимедийного Интернет-контентаявляется "application / x-www-form-urlencoded".Это формат для кодирования пар ключ-значение с возможно дублирующимися ключами.Каждая пара ключ-значение отделяется символом «&», а каждый ключ отделяется от своего значения символом «=».Ключи и значения экранируются, заменяя пробелы символом «+», а затем используя URL-кодировку для всех других не буквенно-цифровых символов.

Итак, чтобы взять вашу хеш-таблицу, вам нужно записать этотело запроса:

format=atom&user[first_name]=ABC&user[last_name]=XYZ.... /etc

. Вам нужно вставить это в этот фрагмент кода:

StreamWriter writer = new StreamWriter(request.GetRequestStream()); 
writer.Write("format=atom&user[first_name]=ABC&user[last_name]=XYZ");
writer.Close();

И, наконец, простой способ превратить ваш HashTable в этоФорма или строка:

String.Join("&", post_parameters.OfType<DictionaryEntry>().Select(de => String.Format("{0}={1}", de.Key, de.Value)));
0 голосов
/ 02 августа 2011

Вы отправляете только имя класса, который сейчас называется System.Collections.Hashtable.Может быть, ваша цель состоит в том, чтобы достичь этого:

    foreach (var item in post_parameters)
    {
        writer.Write(item.GetHashCode());
    }
...