架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 21572|回复: 3

[资料] c#POST数据base64到接口会出错的问题

[复制链接]
发表于 2016-3-31 10:32:51 | 显示全部楼层 |阅读模式
这个base64在requestHeader里面变成了
base64=hySGNg22yX0AIjNQvNJw0xHEbi32NH%2BiRVKDkbOmUiKpxW0%2FS6rUgfLmSa527Y8zZ3GmEzfXMB8ry8fH5GjGeJFGqFxDC4A2hLlvIFzyiDeUCqloGDAJoOLa8Jnif1C8nwRte0GNCRM5RXkshLKZP2itZclgDCYz6OgAF7oLNluoB44cZ3AgF1Q8hVgME8LeqgOqxsIzTt3Xn%2B96j7zp%2FwA%3D

他把base64里面一些/和= 给转成%2F之类的东西了。

所以webservice接收到的参数是错的。。


解决办法:


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

  1. /// <summary>
  2.         /// POST请求与获取结果
  3.         /// </summary>
  4.         public static string HttpPost(string Url, string postDataStr)
  5.         {
  6.             try
  7.             {
  8.                 postDataStr = postDataStr.Replace("+", "%2B");
  9.                 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
  10.                 request.Method = "POST";
  11.                 request.Timeout = 6000000;
  12.                 request.ContentType = "application/x-www-form-urlencoded";
  13.                 request.ContentLength = postDataStr.Length;
  14.                 StreamWriter writer = new StreamWriter(request.GetRequestStream(), Encoding.ASCII);
  15.                 writer.Write(postDataStr);
  16.                 writer.Flush();
  17.                 HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  18.                 string encoding = response.ContentEncoding;
  19.                 if (encoding == null || encoding.Length < 1)
  20.                 {
  21.                     encoding = "UTF-8"; //默认编码
  22.                 }
  23.                 StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding));
  24.                 string retString = reader.ReadToEnd();
  25.                 return retString;
  26.             }
  27.             catch (Exception ex)
  28.             {
  29.                 return null;
  30.             }
  31.         }
复制代码






上一篇:vshost32.exe 已停止工作 的解决办法
下一篇:c#的listbox能item设置附加数据,类似tag
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2016-4-13 19:09:00 | 显示全部楼层


正常接收
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2016-4-22 17:21:42 | 显示全部楼层
这。。。
有 urlencode 和 urldecode  啊
难度你们当这俩函数是摆设么
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2016-4-22 17:51:14 | 显示全部楼层
bbfd 发表于 2016-4-22 17:21
这。。。
有 urlencode 和 urldecode  啊
难度你们当这俩函数是摆设么

额  忘记了  
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2026-4-6 08:31

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表