C# 使用Post方法将哈希表值作为Web请求传递时出现问题

C# 使用Post方法将哈希表值作为Web请求传递时出现问题,c#,post,httpwebrequest,hashtable,C#,Post,Httpwebrequest,Hashtable,我正在asp.net中开发一个web表单,使用C#将一些数据发布到其他网站。使用StreamWriter传递哈希表中存储的数据时遇到问题。 下面是我用来在哈希表中存储数据并使用HttpWebRequest发布到其他站点的代码片段。 1) //用于存储数据的哈希表 Hashtable post_parameters = new Hashtable(); post_parameters.Add("format", "atom"); post_parameters.Add("user[first_n

我正在asp.net中开发一个web表单,使用C#将一些数据发布到其他网站。使用StreamWriter传递哈希表中存储的数据时遇到问题。 下面是我用来在哈希表中存储数据并使用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");
(二) //使用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不可处理实体”,用于将哈希表作为参数传递。
请就此提供帮助,并让我知道如何将哈希表作为Web请求传递。

您现在只发送类的名称,即System.Collections.Hashtable。也许你的目的是为了实现这一点:

    foreach (var item in post_parameters)
    {
        writer.Write(item.GetHashCode());
    }
从中,可以阅读以下内容

当web浏览器从web表单元素发送POST请求时,标准的Internet媒体类型为“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();
最后,一种将
哈希表
转换为该格式或字符串的简单方法:

String.Join("&", post_parameters.OfType<DictionaryEntry>().Select(de => String.Format("{0}={1}", de.Key, de.Value)));
String.Join(&),post_parameters.OfType().Select(de=>String.Format(“{0}={1}”,de.Key,de.Value));

您是否正在尝试实现这一目标?foreach(post_参数中的var项)writer.Write(item.GetHashCode());谢谢你的快速回复!!!但这不是我要找的。实际上,我正在尝试将一段用ruby编写的代码“request.set_form_data(post_参数)”复制到C。这段代码只是将要使用http发布的数据设置为名为post_参数的哈希表。给我一些我可以在C#中使用的东西,因为它在ruby中用于发布哈希表。我很抱歉。我没有仔细阅读你的问题。您的目的是发布表单。所以我唯一能做的就是逐行读取哈希表,逐行写入,并用边界将它们括起来。看看这个:您需要使用“multipart/form data;boundary=”而不是application/x-www-form-urlencoded。我不知道有什么内置函数可以为您完成ruby工作。谢谢。我发送此数据的网站有一个限制,即只能以“application/x-www-form-urlencoded”格式发送数据。在使用ruby代码请求网页时,能否告知您在fiddler()上看到了什么?尤其是你请求的原始视图。谢谢