.NET Framework 4.8.1与.NET Core 8中HttpClient调用API表现差异问题
REST API在.NET Framework 4.8.1与.NET Core 8中HttpClient调用表现不一致
调用某REST API时,.NET Framework 4.8.1和.NET Core 8下的HttpClient表现存在差异,其中.NET Core的结果符合预期,与Postman一致:
- Postman:API正常工作
- .NET Core 8下的HttpClient:API正常工作
- .NET Framework 4.8.1下的HttpClient:仅当显式设置HttpVersion为1.0时,API才正常工作
【Postman请求截图】
未显式设置HttpVersion的.NET Framework代码
Dim client = New HttpClient() Dim request = New HttpRequestMessage(HttpMethod.Post, "https://api_endpint:port/b1s/v2/Login") Dim content = New StringContent("{ ""CompanyDB"": ""XXXX"", ""UserName"": ""XXXX"", ""Password"": ""XXXX"" }", Nothing, "application/json") request.Content = content Dim ff = request.Content.ReadAsStringAsync().Result Dim response = client.SendAsync(request).Result response.EnsureSuccessStatusCode()
对应输出
StatusCode: 500, ReasonPhrase: 'Internal Server Error', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: { Connection: close Date: Wed, 13 Nov 2024 05:20:37 GMT Set-Cookie: ROUTEID=.node2; path=/;Secure;SameSite=None Server: Apache/2.4.51 Server: (Unix) Content-Length: 0 }
设置HttpVersion为1.0的.NET Framework代码
Dim client = New HttpClient() Dim request = New HttpRequestMessage(HttpMethod.Post, "https://api_endpint:port/b1s/v2/Login") request.Version = HttpVersion.Version10 Dim content = New StringContent("{ ""CompanyDB"": ""XXXX"", ""UserName"": ""XXXX"", ""Password"": ""XXXX"" }", Nothing, "application/json") request.Content = content Dim ff = request.Content.ReadAsStringAsync().Result Dim response = client.SendAsync(request).Result response.EnsureSuccessStatusCode()
对应输出
StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: { Vary: Accept-Encoding Date: Wed, 13 Nov 2024 05:27:46 GMT Set-Cookie: B1SESSION=<token>;HttpOnly;;Secure;SameSite=None Set-Cookie: ROUTEID=.node2; path=/;Secure;SameSite=None Server: Apache/2.4.51 Server: (Unix) Connection: close Content-Type: application/json; odata.metadata=minimal; charset=utf-8 }
.NET Core 8代码
Dim client = New HttpClient() Dim request = New HttpRequestMessage(HttpMethod.Post, "https://api_endpint:port/b1s/v2/Login") Dim content = New StringContent("{ ""CompanyDB"": ""XXXX"", ""UserName"": ""XXXX"", ""Password"": ""XXXX"" }", Nothing, "application/json") request.Content = content Dim ff = request.Content.ReadAsStringAsync().Result Dim response = client.SendAsync(request).Result response.EnsureSuccessStatusCode()
对应输出
StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: { Vary: Accept-Encoding Date: Wed, 13 Nov 2024 05:27:46 GMT Set-Cookie: B1SESSION=<token>;HttpOnly;;Secure;SameSite=None Set-Cookie: ROUTEID=.node2; path=/;Secure;SameSite=None Server: Apache/2.4.51 Server: (Unix) Connection: close Content-Type: application/json; odata.metadata=minimal; charset=utf-8 }
内容的提问来源于stack exchange,提问作者raunakchoraria
相关产品推荐
相关产品推荐

