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;

猜你喜欢

转载自www.cnblogs.com/xujingdong/p/9054733.html