我的代码如下:但是不能把字典编程字节流?? var parameter = new Dictionary<string, string>() {
{ "username", "username" },
{ "password", "password" }
};
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(BaseUrl+"Login"));
            CookieContainer cookie=request.CookieContainer;
            request.KeepAlive = true;
            //上面的http头看情况而定,但是下面俩必须加   
            request.ContentType = "application/form-url-encoded";
            request.Method = "POST";
          
            Encoding encoding = Encoding.UTF8;//根据网站的编码自定义   
            byte[] postData = encoding.GetBytes(parameter);//postDataStr即为发送的数据   
            request.ContentLength = postData.Length;
            Stream requestStream = request.GetRequestStream();
            requestStream.Write(postData, 0, postData.Length);            HttpWebResponse newresponse = (HttpWebResponse)request.GetResponse(); 
   byte[] postData = encoding.GetBytes(parameter);//postDataStr即为发送的数据 这句话好像出错了,请问如果要传递字典,怎么传?  
httppostweb

解决方案 »

  1.   

    可以传bt64
    然后再转        /// <summary> 
            /// 把 Base64 转图片
            /// </summary> 
            /// <param name="base64String"></param> 
            public MemoryStream Base64ToImage(string base64String)
            {
                // base64String.Substring(0, base64String.Length / 40 * 40) 主要是 Base64 編碼長度有規定必須是 0 或 4 的整數倍,所以為免出錯,把長度處理一下 
                byte[] imageBytes = Convert.FromBase64String(base64String);
                // byte[] imageBytes = Convert.FromBase64String(base64String.Substring(0,128)); 
                MemoryStream _ms = new MemoryStream(imageBytes, 0, imageBytes.Length);            // Convert byte[] to Image 
                _ms.Write(imageBytes, 0, imageBytes.Length);
                /*
                System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true);            image.Save(Server.MapPath("Report"), ImageFormat.Png);
                */
                return _ms;
            }        // 把图片转 Base64 编码
            public string ImageToBase64(System.Drawing.Image image, System.Drawing.Imaging.ImageFormat format)
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    // Convert Image to byte[] 
                    image.Save(ms, format);
                    byte[] imageBytes = ms.ToArray();                // Convert byte[] to Base64 String 
                    string base64String = Convert.ToBase64String(imageBytes);
                    return base64String;
                }
            }
      

  2.   

    可以用hashtable吗? Dictionary<string, string> 这个好像不支持序列化
        
    var parameter = new Hashtable() {
                    { "username", "username" },
                    { "password", "password" }
                };              Encoding encoding = Encoding.UTF8;//根据网站的编码自定义   
                  
                  MemoryStream ms = new MemoryStream();
                  SoapFormatter formatter = new SoapFormatter();
                  formatter.Serialize(ms, parameter);
                  ms.Close();
                  
                  byte[] postData = ms.GetBuffer();
      

  3.   

    encoding.GetBytes 参数得是字符串。
      

  4.   

    Post的参数和get的参数格式差不多都是
    key1=value1&key2=value2参考:
    C# HttpWebRequest提交数据方式浅析
    http://developer.51cto.com/art/200909/149995.htm
      

  5.   

    ???????
    我想问一下为啥要传这个呢
    ????哪一家的web服务器代码,会接收这种表单提交呢?你不会是想提交json过去把?还是你想通过hashtable构造一个表单??
      

  6.   

    这至少需要知道两个知识。其一,是知道“序列化/反序列化”概念。把内存对象变为低级的格式,才能跟“传送”功能(你这里就是byte[])连接上。其二,大多数比较通用的序列化机制都是针对比较简单通用的内存对象。你在设计程序时也不要一味地纠结。例如“字典”有一大堆累赘的东西会让序列化程序出错,所以应该转换为数组(使用Linq的ToArray方法),再序列化。反过来说,数组也是使用Linq的ToDictionary方法转换为字典。
      

  7.   


    这可以作为一个接入http协议的c/s服务器。