C# 使用Post方法将哈希表值作为Web请求传递时出现问题
我正在asp.net中开发一个web表单,使用C#将一些数据发布到其他网站。使用StreamWriter传递哈希表中存储的数据时遇到问题。 下面是我用来在哈希表中存储数据并使用HttpWebRequest发布到其他站点的代码片段。 1) //用于存储数据的哈希表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
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()上看到了什么?尤其是你请求的原始视图。谢谢