如何将NameValueCollection转换为字节数组

时间:2012-03-17 07:06:34

标签: c#

我必须将参数传递给WebRequest。参数以NameValueCollection的形式提供。我必须返回一个字节数组。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

我假设你的意思是HttpWebRequest,因为WebRequest只是一个抽象类。并且,我假设您正在进行POST,因为使用GET,您可以将其打到URL的末尾。

因此,您需要先创建POST的正文,该正文将写入Web请求的请求流中:

var sb = new StringBuilder();
foreach(var item in myCollection) {
  sb.AppendFormat("{0}={1}&", item.Name, HttpUtility.UrlEncode(item.Value.ToString()));
}
sb.Remove(sb.Length - 1, 1); // remove the last '&'

此时,您将拥有一个包含"myVal1=Hello%20World&myVal2=5"之类字符串的字符串缓冲区。现在您要将其写入请求的流:

var request = (HttpWebRequest)HttpWebRequest.Create("http://somewhere.url/asdf/asdf");
request.Method = "POST";
var stream = request.GetRequestStream();
var bytes = Encoding.UTF8.GetBytes(sb.ToString());
request.ContentType="application/x-www-form-urlencoded;charset=UTF-8";
request.ContentLength = data.Length;
stream.Write(bytes, 0, bytes.Length);
stream.Close();
var response = (HttpWebResponse)request.GetResponse();
// ... process the response ...

希望这会有所帮助。我假设你的NameValueCollection是字符串形式 - >宾语。如果不同,请调整“item.Value”部分。我也没有URL编码一对密钥,因为我认为他们不接受网址编码密钥。


答案 1 :(得分:0)

您应首先序列化您的NameValueCollection。

 String str = "";

 str = mynvc.key + "=" + mynvc.value;

然后使用它将此字符串转换为字节数组:

System.Text.UTF8Encoding  encoding=new System.Text.UTF8Encoding();
Byte[] myStr = encoding.GetBytes(str);