如果参数中含有特殊字符&,则强制URL编码<br>

  http协议中参数的传输是"key=value"这种简直对形式的,如果要传多个参数就需要用“&”符号对键值对进行分割。如"?name1=value1&name2=value2",这样在服务端在收到这种字符串的时候,会用“&”分割出每一个参数,然后再用“=”来分割出参数值,
在计算机中使用用ASCII码表示 如果我的参数值中就包含=或&这种特殊字符的时候该怎么办。
比如说“name1=value1”,其中value1的值是“va&lu=e1”字符串,那么实际在传输过程中就会变成这样“name1=va&lu=e1”。我们的本意是就只有一个键值对,但是服务端会解析成两个键值对,这样就产生了歧义。 URL编码只是简单的在特殊字符的各个字节前加上%,例如,我们对上述会产生奇异的字符进行URL编码后结果:“name1=va%26lu%3D”,这样服务端会把紧跟在“%”后的字节当成普通的字节,就是不会把它当成各个参数或键值对的分隔符。
第一种方法
第一步:获取在Web.config中配置要请求的地址
string url = System.Web.Configuration.WebConfigurationManager.AppSettings["url"];
第二步:把字符串编码(编码详解)
string allStr = System.Web.HttpUtility.UrlEncode(str, System.Text.Encoding.UTF8) ;
第三步:把参数转成byte 
 byte[] bufferB = Encoding.UTF8.GetBytes(allStr);
第四步:构建HttpWebRequest,并发送
System.Net.ServicePointManager.DefaultConnectionLimit = ;
HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(url);
WebReq.Method = "POST";
WebReq.ContentType = "application/x-www-form-urlencoded";
WebReq.ContentLength = allStr.Length;
Stream PostData = WebReq.GetRequestStream();
PostData.Write(bufferB, , bufferB.Length);
PostData.Close();
第五步:接收返回结果(解析返回的JSON)
HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
StreamReader sr = new StreamReader(WebResp.GetResponseStream(), System.Text.Encoding.UTF8);
string backstr = sr.ReadToEnd();
backstr = HttpUtility.UrlDecode(backstr);
Console.WriteLine(WebResp.StatusCode);
Console.WriteLine(WebResp.Server);
Stream Answer = WebResp.GetResponseStream();
StreamReader _Answer = new StreamReader(Answer);
Console.WriteLine(_Answer.ReadToEnd());
---------------------
作者:容妞
来源:CSDN
原文:https://blog.csdn.net/lijingrong_ljr/article/details/53214729
版权声明:本文为博主原创文章,转载请附上博文链接!
string url = "http://16.8.3.91:8089/api/query/Bicycle?deviceno=1&operator=2&sign=9fe789d7a5629a59ed56d7a256dc5a1a&cardno=0310";//http需要传递的参数与地址
            WebRequest wRequest = WebRequest.Create(url);
            wRequest.Method = "GET";
            wRequest.ContentType = "text/html;charset=UTF-8";
            WebResponse wResponse = wRequest.GetResponse();
            Stream stream = wResponse.GetResponseStream();
            StreamReader reader = new StreamReader(stream, System.Text.Encoding.UTF8);
            string str = reader.ReadToEnd();   //url返回的值
---------------------
作者:叫我梧桐树
来源:CSDN
原文:https://blog.csdn.net/u012732371/article/details/58587092
版权声明:本文为博主原创文章,转载请附上博文链接!
                        M1001 m1001 = new M1001()
{
Head = baseHead,
Body = body
}; string serviceUrl = "https://jq.asus.com.cn/omsec/v1.0/ECOrder/PutOrder?appid=t0a2YlbyD5JL&token=LLfDDlwHuifVnP2BNngCdebuj4DtYXtAD6QAKEHaA4cDMUniKkKnNJwnuQlL";
Encoding encoding = Encoding.UTF8;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceUrl);
request.Method = "POST";
request.Accept = "text/html, application/xhtml+xml, */*";
request.ContentType = "application/json";
byte[] buffer = encoding.GetBytes(JsonConvert.SerializeObject(m1001));
request.ContentLength = buffer.Length;
request.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse res = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8))
{
string Result = reader.ReadToEnd();
}

异步async

                        string json = JsonConvert.SerializeObject(m1001);
string appid = System.Configuration.ConfigurationManager.AppSettings["appid"];
string token = System.Configuration.ConfigurationManager.AppSettings["token"];
string serviceUrl = "https://xxxxxx?appid=" + appid + "&token=" + token + ""; HttpContent JSONContents = new StringContent(JsonConvert.SerializeObject(m1001), Encoding.UTF8, "application/json"); HttpClient _httpClient = new HttpClient();
var Msg = await _httpClient.PostAsync(serviceUrl, JSONContents);
if (Msg.IsSuccessStatusCode)
{
string Ret = "";
var s = Msg.Content.ReadAsStringAsync();
JObject objs = JObject.Parse(s.Result);
Root baseroot = JsonConvert.DeserializeObject<Root>(s.Result);
if (string.IsNullOrEmpty(baseroot.head.errorCode))
{//写入成功
Ret = baseroot.body.CreateDateTime.ToString();
}
else
{//写入失败
Ret = baseroot.head.transMessage.ToString();//发邮件还是怎么的
}
}
 
// 使用C# 5.0中提供的async 和await关键字来定义异步方法
// 从代码中可以看出C#5.0 中定义异步方法就像定义同步方法一样简单。
// 使用async 和await定义异步方法不会创建新线程,
// 它运行在现有线程上执行多个任务.
// 此时不知道大家有没有一个疑问的?在现有线程上(即UI线程上)运行一个耗时的操作时,
// 为什么不会堵塞UI线程的呢?
// 这个问题的答案就是 当编译器看到await关键字时,线程会
private async Task<long> AccessWebAsync()
{
MemoryStream content = new MemoryStream(); // 对MSDN发起一个Web请求
HttpWebRequest webRequest = WebRequest.Create("http://msdn.microsoft.com/zh-cn/") as HttpWebRequest;
if (webRequest != null)
{
// 返回回复结果
using (WebResponse response = await webRequest.GetResponseAsync())
{
using (Stream responseStream = response.GetResponseStream())
{
await responseStream.CopyToAsync(content);
}
}
} txbAsynMethodID.Text = Thread.CurrentThread.ManagedThreadId.ToString() ;
return content.Length;
}
                        string CustomerPO = j["Success"]["items"]["item"][i]["out_tid"].ToString();
string storage_name = com.Switch_ShipTo(j["Success"]["items"]["item"][i]["storage_id"].ToString());// 要做个仓库编码匹配仓库名称的设置
string tid_item = j["Success"]["items"]["item"][i]["tid_item"].ToString();//明细
string pro_totalfee = j["Success"]["items"]["item"][i]["pro_totalfee"].ToString();//产品总金额 JArray jArray = JArray.Parse(tid_item);
JArray arr = new JArray();
for (int q = 0; q < jArray.Count; q++)
{
JObject obj = new JObject();
JObject jdata = (JObject)jArray[q];
obj["linenum"] = jdata["pro_detail_code"];
obj["sku"] = jdata["product_no"].ToString();//
obj["originalsku"] = jdata["product_no"].ToString();//先在ebd里查询不到
obj["qty"] = jdata["pro_num"].ToString(); //edbProductGet(jdata["product_no"].ToString());
obj["inventoryname"] = com.Switch_ShipTo(jdata["storage_id"].ToString());
obj["price"] = com.Change(Convert.ToDouble(pro_totalfee) / jArray.Count, 2);
arr.Add(obj);
} var data = new JObject
{
{"Head",new JObject
{
{"TransCode","X1002" },
{"TransId",com.GenerateTransId(18)}
}
},
{ "Body", new JObject
{
{"orderno", orderno },
{"CustomerPO", CustomerPO},
{"ordertypecode", "Direct" },
{"billto", _Setting.Value.JD_billto.ToString() },//账款店铺是不是要写为定值
{"shipto", storage_name},//还有就是shipto,目前是8个仓,但是从e店宝获取的只是storage_id,是要把对应的仓库名称写在配置里,还是只传id值
{"workid", _Setting.Value.JD_workid.ToString()}, //workid
{"detail", arr }
}
}
}; string appid = _Setting.Value.Gettoken_appid;//这个是要替换成正式的appid(有了)
var httpClient = new HttpClient();
string serviceUrl = "https://xxxcn:9007/api/v1.0/Order/PutStandard?appid=" + appid + "&token=" + com.GetNewToken() + "";//这个是写入京东的url
HttpContent JSONContents = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json"); var message = await httpClient.PostAsync(serviceUrl, JSONContents);
if (message.IsSuccessStatusCode)
{
string rr = await message.Content.ReadAsStringAsync();
JObject objs = JObject.Parse(rr);
string errorCode = objs["head"]["errorCode"].ToString();
if (string.IsNullOrEmpty(errorCode))
{//写入成功
}
else
{//写入失败
com.JD_Error("订单:" + orderno + ",写入StageHead表失败:" + objs["head"]["transMessage"].ToString());
}
} //using (var resss = await httpClient.PostAsync(serviceUrl, JSONContents))
//{
// if (resss.IsSuccessStatusCode)
// {
// string ser = $"{resss.Content.ReadAsStringAsync().Result}";
// JObject objs = JObject.Parse(ser);
// string errorCode = objs["head"]["errorCode"].ToString();
// if (string.IsNullOrEmpty(errorCode))
// {//写入成功
// }
// else
// {//写入失败
// com.JD_Error("订单:" + orderno + ",写入StageHead表失败:" + objs["head"]["transMessage"].ToString());
// } // }
//}

  

                          //string appid = _Setting.Value.Gettoken_appid;//这个是要替换成正式的appid(有了)
//string serviceUrl = "https://xxxx.com.cn:9007/api/v1.0/Order/PutStandard?appid=" + appid + "&token=" + com.GetNewToken() + "";// //Encoding encoding = Encoding.UTF8;
//HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceUrl);
//request.Method = "POST";
//request.Accept = "text/html, application/xhtml+xml, */*";
//request.ContentType = "application/json";
//byte[] buffer = encoding.GetBytes(JsonConvert.SerializeObject(data));
//request.ContentLength = buffer.Length;
//request.GetRequestStream().Write(buffer, 0, buffer.Length);
//HttpWebResponse res = (HttpWebResponse)request.GetResponse();
//using (StreamReader reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8))
//{
// string Result = reader.ReadToEnd();
// JObject objs = JObject.Parse(Result);
// string errorCode = objs["head"]["errorCode"].ToString();
// if (string.IsNullOrEmpty(errorCode))
// {//写入成功
// }
// else
// {//写入失败
// com.JD_Error("订单:" + orderno + ",写入StageHead表失败:" + objs["head"]["transMessage"].ToString());
// }
//}

 

最新文章

  1. IOS第12天(3,UIViewController的生命周期)
  2. Erlang之父的学习历史及学习建议
  3. Intel Edison
  4. HTML4 和 HTML5 的10个关键区别
  5. 用FileInputStream读文件,字节数组接收,不知道文件的大小时怎么办
  6. Supporting Connected Routes to Subnet Zero
  7. Careercup - Microsoft面试题 - 5175246478901248
  8. iTween基础之Move(移动)
  9. HDU2054JAVA
  10. SQL VS NoSQL
  11. iOS-AFNetworking封装Get(自定义HTTP Header)和Post请求及文件下载
  12. 校招:Vobile阜博通2015校园招聘
  13. Java数据结构和算法 - 二叉树
  14. css: box-sizing
  15. MongoDB 通过配置文件启动及注册服务
  16. linux对4T硬盘进行分区
  17. NOIP2017提高组Day2T2 宝藏 洛谷P3959 状压dp
  18. oracle中rownum和rowid的区别【转】
  19. Dubbo配置参数的优先级
  20. Testbench

热门文章

  1. react新特性 react hooks
  2. linux 下查看一个进程执行路径
  3. 关于MacBook怎么更新Android SDK
  4. Android系统优化
  5. iOS开发——优化篇—— 25个性能优化/内存优化常用方法
  6. CANopen——总线基本知识
  7. 一个shell脚本清空所有vim的配置!!
  8. bzoj1898 [Zjoi2005]Swamp 沼泽鳄鱼——矩阵快速幂
  9. 关于mysql的索引原理与慢查询优化
  10. js几种escape()解码与unescape()编码