最近做的一個WebApi項目,需要訪問別人的接口。寫好訪問POST請求的接口后,調試成功!
But,第二次請求就會超時!Why???
於是乎網上各種找方案,無奈就是找不到。怎么辦呢?於是把HttpWebRequest類的每一個屬性都設置一邊看看有沒有效果。
皇天不負有心人啊,終於找到了病症的症結所在····
不廢話了,貼代碼:
1 /// <summary> 2 /// POST請求 3 /// </summary> 4 /// <param name="url">地址</param> 5 /// <param name="parameters">參數</param> 6 /// <param name="timeOut">超時時間</param> 7 /// <returns></returns> 8 public static string HttpPost(string url, IDictionary<string, string> parameters, int timeOut) 9 { 10 HttpWebRequest request = null; 11 request = WebRequest.Create(url) as HttpWebRequest; 12 request.Method = "POST"; 13 request.ContentType = "application/x-www-form-urlencoded"; 14 request.Timeout = timeOut;//超時時間 15 request.ServicePoint.Expect100Continue = false;//解決第二次請求失敗問題 16 17 //發送POST數據 18 if (!(parameters == null || parameters.Count == 0)) 19 { 20 StringBuilder buffer = new StringBuilder(); 21 int i = 0; 22 foreach (string key in parameters.Keys) 23 { 24 if (i > 0) 25 { 26 buffer.AppendFormat("&{0}={1}", key, parameters[key]); 27 } 28 else 29 { 30 buffer.AppendFormat("{0}={1}", key, parameters[key]); 31 i++; 32 } 33 } 34 byte[] data = Encoding.ASCII.GetBytes(buffer.ToString()); 35 using (Stream stream = request.GetRequestStream()) 36 { 37 stream.Write(data, 0, data.Length); 38 } 39 } 40 string[] values = request.Headers.GetValues("Content-Type"); 41 42 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 43 44 using (Stream s = response.GetResponseStream()) 45 { 46 StreamReader reader = new StreamReader(s, Encoding.UTF8); 47 return reader.ReadToEnd(); 48 } 49 }
關鍵點就在於設置一個屬性為false:request.ServicePoint.Expect100Continue = false;
