我要传送一个base64字符串到一个webservicestring postData = "base64=hySGNg22yX0AIjNQvNJw0xHEbi32NH+iRVKDkbOmUiKpxW0/S6rUgfLmSa527Y8zZ3GmEzfXMB8ry8fH5GjGeJFGqFxDC4A2hLlvIFzyiDeUCqloGDAJoOLa8Jnif1C8nwRte0GNCRM5RXkshLKZP2itZclgDCYz6OgAF7oLNluoB44cZ3AgF1Q8hVgME8LeqgOqxsIzTt3Xn+96j7zp/wA=";
    byte[] dataArray = Encoding.Default.GetBytes(postData);
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(ServerPage);
    request.Method = "POST";
    request.ContentLength = dataArray.Length;
    request.ContentType = "application/x-www-form-urlencoded";
    Stream dataStream = null;
    try
    {
        dataStream = request.GetRequestStream();
    }
    catch (Exception)
    {
    }
    dataStream.Write(dataArray, 0, dataArray.Length);
    dataStream.Close();但是这个base64在requestHeader里面变成了
base64=hySGNg22yX0AIjNQvNJw0xHEbi32NH%2BiRVKDkbOmUiKpxW0%2FS6rUgfLmSa527Y8zZ3GmEzfXMB8ry8fH5GjGeJFGqFxDC4A2hLlvIFzyiDeUCqloGDAJoOLa8Jnif1C8nwRte0GNCRM5RXkshLKZP2itZclgDCYz6OgAF7oLNluoB44cZ3AgF1Q8hVgME8LeqgOqxsIzTt3Xn%2B96j7zp%2FwA%3D他把base64里面一些/和= 给转成%2F之类的东西了。所以webservice接收到的参数是错的。。
 [WebMethod]
public string GenerateOrder(string base64)

    byte[] buffer = Convert.FromBase64String(base64); //在这出错了。base64不对。。
}
所以在request设置那里是不是少设置了什么?怎样才能不让他转义呢??
求助!c# webserWeb服务base64HttpWebRequestC#

解决方案 »

  1.   

    还是老老实实添加 Web 引用吧,换种调用方式
      

  2.   

    ///<summary>
    /// Base 64 Encoding with URL and Filename Safe Alphabet using UTF-8 character set.
    ///</summary>
    ///<param name="str">The origianl string</param>
    ///<returns>The Base64 encoded string</returns>
    public static string Base64ForUrlEncode(string str)
    {
        byte[] encbuff = Encoding.UTF8.GetBytes(str);
        return HttpServerUtility.UrlTokenEncode(encbuff);
    }///<summary>
    /// Decode Base64 encoded string with URL and Filename Safe Alphabet using UTF-8.
    ///</summary>
    ///<param name="str">Base64 code</param>
    ///<returns>The decoded string.</returns>
    public static string Base64ForUrlDecode(string str)
    {
        byte[] decbuff = HttpServerUtility.UrlTokenDecode(str);
        return Encoding.UTF8.GetString(decbuff);
    }
      

  3.   

    自己解决了string base64 = "base64=hySGNg22yX0AIjNQvNJw0xHEbi32NH+iRVKDkbOmUiKpxW0/S6rUgfLmSa527Y8zZ3GmEzfXMB8ry8fH5GjGeJFGqFxDC4A2hLlvIFzyiDeUCqloGDAJoOLa8Jnif1C8nwRte0GNCRM5RXkshLKZP2itZclgDCYz6OgAF7oLNluoB44cZ3AgF1Q8hVgME8LeqgOqxsIzTt3Xn+96j7zp/wA=";
    byte[] buffer = Convert.FromBase64String(base64);
    string Base64StrData = Convert.ToBase64String(buffer).Replace("+", "%2B");//注意加号(’+‘)的替换处理,否则由于加号经过Url传递后变成空格而得不到合法的Base64字符串
            string postData = "str=" + Base64StrData;
        byte[] dataArray = Encoding.Default.GetBytes(postData);