线上深坑系列之一 参数中含有‘%’

请求参数中含有‘%’并且对其执行HttpUtility.UrlEncode,那么在向nginx发送Post请求后,响应的数据永远为空,代码如下:

string originMsg = "抗PD-L1抗体检测试剂(免疫组织化学法)在非小细胞肺癌样本中以1%为阈值进行检测的结果重现性研究"; // 项目信息中含有‘%’, 项目信息并不能直接看到,最后查询日志得到此项目名称,在本地复现成功
string desc = HttpUtility.UrlEncode(originMsg);
// 通过webrequest的post传输数据的时候,如果url里面的参数带有‘%’,那么在取地址栏的参数的时候会出现空指针,或者是错误。
string param = "appId=16&action=sign&bizSn={0}&msg={1}&msgWrapper=0&url={2}&mode=redirect&desc={3}";
param = string.Format(param, bizSn, msg, CA_CALLBACK_URL, desc);
byte[] bs = Encoding.ASCII.GetBytes(param);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = bs.Length;
ServicePointManager.ServerCertificateValidationCallback += RemoteCertificateValidate;
using (Stream reqStream = req.GetRequestStream())
{
    reqStream.Write(bs, 0, bs.Length);
    reqStream.Close();
}
using (HttpWebResponse response = (HttpWebResponse)req.GetResponse())
{
    using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
    {
        responseData = reader.ReadToEnd().ToString();// 此时接收到的数据永远为空
    }
}

所以传递参数的时候,注意检查是否含有‘%’,随即再进行处理。

posted @ 2022-08-11 16:40  xuxuzhaozhao  阅读(318)  评论(0编辑  收藏  举报