我必须将参数传递给WebRequest。参数以NameValueCollection的形式提供。我必须返回一个字节数组。
我该怎么做?
答案 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);