架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 21855|回复: 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 | 显示全部楼层
  1. /// <summary>
  2.             /// 编码url为base64字符串
  3.             /// </summary>
  4.             /// <param name="url"></param>
  5.             /// <returns></returns>
  6.             public static string CodingBase64(string url)
  7.             {
  8.                 string base64 = url.Replace("+", "%2B");
  9.                 return base64;
  10.             }
复制代码


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

额  忘记了  
  1. /// <summary>
  2.         /// url编码和解码
  3.         /// </summary>
  4.         public class UrlCode
  5.         {
  6.             /// <summary>
  7.             /// url以utf-8格式编码
  8.             /// </summary>
  9.             /// <param name="str"></param>
  10.             /// <returns></returns>
  11.             public static string UrlEncodeUTF8(string str)
  12.             {
  13.                 try
  14.                 {
  15.                     string temp = System.Web.HttpUtility.UrlEncode(str);
  16.                     return temp;
  17.                 }
  18.                 catch (Exception ex)
  19.                 {
  20.                     return null;
  21.                 }
  22.             }

  23.             /// <summary>
  24.             /// url以gb2312格式编码
  25.             /// </summary>
  26.             /// <param name="str"></param>
  27.             /// <returns></returns>
  28.             public static string UrlEncodeGB2312(string str)
  29.             {
  30.                 try
  31.                 {
  32.                     string temp = System.Web.HttpUtility.UrlEncode(str, System.Text.Encoding.GetEncoding("GB2312"));
  33.                     return temp;
  34.                 }
  35.                 catch (Exception ex)
  36.                 {
  37.                     return null;
  38.                 }
  39.             }

  40.             /// <summary>
  41.             /// url以utf-8格式解码
  42.             /// </summary>
  43.             /// <param name="str"></param>
  44.             /// <returns></returns>
  45.             public static string UrlDecodeUTF8(string str)
  46.             {
  47.                 try
  48.                 {
  49.                     string temp = System.Web.HttpUtility.UrlDecode(str);
  50.                     return temp;
  51.                 }
  52.                 catch (Exception ex)
  53.                 {
  54.                     return null;
  55.                 }
  56.             }

  57.             /// <summary>
  58.             /// url以gb2312格式解码
  59.             /// </summary>
  60.             /// <param name="str"></param>
  61.             /// <returns></returns>
  62.             public static string UrlDecodeGB2312(string str)
  63.             {
  64.                 try
  65.                 {
  66.                     string temp = System.Web.HttpUtility.UrlDecode(str, System.Text.Encoding.GetEncoding("GB2312"));
  67.                     return temp;
  68.                 }
  69.                 catch (Exception ex)
  70.                 {
  71.                     return null;
  72.                 }
  73.             }

  74.             /// <summary>
  75.             /// 编码url为base64字符串
  76.             /// </summary>
  77.             /// <param name="url"></param>
  78.             /// <returns></returns>
  79.             public static string CodingBase64(string url)
  80.             {
  81.                 string base64 = url.Replace("+", "%2B");
  82.                 return base64;
  83.             }

  84.             /// <summary>
  85.             /// 获取url参数
  86.             /// </summary>
  87.             /// <param name="paramName">参数名称</param>
  88.             /// <param name="paramsStr">整个url</param>
  89.             /// <returns></returns>
  90.             public static string GetParams(string paramName, string paramsStr)
  91.             {
  92.                 Regex regParam = new Regex("(?:^|&)" + paramName + "=(?<Value>[^&]*)", RegexOptions.IgnoreCase);
  93.                 Match mth = regParam.Match(paramsStr.Trim());
  94.                 if (mth.Success)
  95.                 {
  96.                     //匹配成功
  97.                     return mth.Groups["Value"].Value;
  98.                 }
  99.                 else
  100.                 {
  101.                     return null;
  102.                 }
  103.             }
  104.         }
复制代码
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

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

Mail To:help@itsvse.com

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

GMT+8, 2026-5-21 10:26

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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