Toggle navigation
首页
关于TCPGAME
快乐分享
联系我们
C# HttpClient 发送Json数据的Post请求出现服务器无响应异常
Lonner
时间:2021-05-05 09:42:24
阅读:2969
###现象 - 使用HttpClient调用api接口发送Json数据的Post请求出现服务器无响应导致HttpClient出现超时。 - 但是在Postman中可以正常调用接口并返回响应结果。 - API接口服务的同一套代码在本地搭建服务,使用同样的C#代码,HttpClient可以正常提交并响应请求。 **先贴出代码:** ``` String ApiHost = "http://xxxxxxxx"; HttpClient client = new HttpClient(); client.Timeout= TimeSpan.FromSeconds(10); string json = JsonConvert.SerializeObject( new { a = "Add", name = "TestName", area = "China" }); HttpContent content = new StringContent(json, Encoding.UTF8, "application/json"); try { HttpResponseMessage response = await client.PostAsync(ApiHost, content);//执行到这句话后就挂起,直至超时 response.EnsureSuccessStatusCode(); String result = response.Content.ReadAsStringAsync().Result; } catch (Exception e) { throw; } ``` ###原因 API接口搭建在服务器上,做了网关分发,API接口代码正常返回了响应结果,但是经过网关的时候被拦截了,所以导致HttpClient直接就表现为未收到任何响应。 分析网关,最后找到了罪魁祸首--HttpClient 请求头默认带着一个**Expect**的参数,刚好配置网关的大佬把这个参数限制死了,导致网关直接拦截了返回的数据。 ###解决方案 有两种方法可以解决问题: 一、 修改网关的配置 二、 或者禁用Expect`client.DefaultRequestHeaders.ExpectContinue = false` 修改后代码如下 ``` String ApiHost = "http://xxxxxxxx"; HttpClient client = new HttpClient(); client.Timeout= TimeSpan.FromSeconds(10); client.DefaultRequestHeaders.ExpectContinue = false; string json = JsonConvert.SerializeObject( new { a = "Add", name = "TestName", area = "China" }); HttpContent content = new StringContent(json, Encoding.UTF8, "application/json"); try { HttpResponseMessage response = await client.PostAsync(ApiHost, content);//执行到这句话后就挂起,直至超时 response.EnsureSuccessStatusCode(); String result = response.Content.ReadAsStringAsync().Result; } catch (Exception e) { throw; } ``` 问题解决!!
上一章:C# WPF TextBox文字垂直居中使用VerticalContentAlignment=“Center”失效的问题
下一章:C# WPF MVVM下显示ObservableCollection集合Count Add或者Remove界面不更新的解决方法