C#程序把RSA加密后的密码发送到后台总是校验失败,用wireshark抓包检查发现POST发出的密码中的+号都变成了空格。为了正确的发送数据,要用URL转码协议进行转码。
有两个方法进行URL转码
第一种是使用HttpUtility.UrlEncode(),命名空间为System.Web
不过我使用的C#版本已经不支持该写法
第二种是使用WebUtility.UrlEncode(),命名空间为System.Net
我所使用的C#版本正常使用,建议使用该函数
//如果需要POST数据 if (!(parameters == null || parameters.Count == 0)) { StringBuilder buffer = new StringBuilder(); int i = 0; foreach (string key in parameters.Keys) { if (i > 0) { //对有特殊字符的post内容进行转码 buffer.AppendFormat("&{0}={1}", key, WebUtility.UrlEncode(parameters[key])); } else { //对有特殊字符的post内容进行转码 buffer.AppendFormat("{0}={1}", key, WebUtility.UrlEncode(parameters[key])); } i++; } byte[] data = charset.GetBytes(buffer.ToString()); using (Stream stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } }