C# WebApi遇到的坑之第二次請求失敗問題


最近做的一個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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM