Fab*_*ius 13 c# api dotnet-httpclient .net-6.0
由于 WebClient 在 .NET 6 中已弃用,因此我想使用 WebClient 将以下代码转换为使用 HttpClient 调用 REST Web API 的等效代码:
using WebClient client = new();
client.Encoding = Encoding.UTF8;
client.Headers.Set(HttpRequestHeader.ContentType, "application/json");
client.Headers.Add("user_key", tokens[0]);
client.Headers.Add("Session_key", tokens[1]);
string json = JsonSerializer.Serialize(sms);
string serverResponse = client.UploadString(_baseUrl + "sms", "POST", json);
Run Code Online (Sandbox Code Playgroud)
目前,我实施了以下解决方案:
HttpClient httpClient = _httpClientFactory.CreateClient();
HttpRequestMessage request = new(HttpMethod.Post, _baseUrl + "sms");
request.Headers.Add("user_key", tokens[0]);
request.Headers.Add("Session_key", tokens[1]);
string json = JsonSerializer.Serialize(sms);
request.Content = new StringContent(json, Encoding.UTF8, MediaTypeNames.Application.Json);
using HttpResponseMessage response = await httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
Run Code Online (Sandbox Code Playgroud)
我认为上述解决方案是替换原始代码的最干净、最有效的方法。有专家可以证实一下吗?
Chr*_*ton 18
.Net 6支持同步Send()
这是一个简单的 GET:
using var httpClient = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://api.example.com/api/v1/get");
var response = httpClient.Send(request);
using var reader = new StreamReader(response.Content.ReadAsStream());
var responseBody = reader.ReadToEnd();
Run Code Online (Sandbox Code Playgroud)
这是一个帖子:
var handler = new HttpClientHandler {
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
};
var client = new HttpClient(handler) {
BaseAddress = new Uri(_baseurl)
};
var webRequest = new HttpRequestMessage(HttpMethod.Post, "sms") {
Content = new StringContent(json, Encoding.UTF8, "application/json")
};
webRequest.Headers.Add("user_key", tokens[0]);
webRequest.Headers.Add("Session_key", tokens[1]);
var response = client.Send(webRequest);
var reader = new StreamReader(response.Content.ReadAsStream());
var responseBody = reader.ReadToEnd();
Run Code Online (Sandbox Code Playgroud)
看起来很简单:
HttpClient client = new()
{
BaseAddress = new Uri(_baseUrl)
};
using HttpRequestMessage request = new(HttpMethod.Post, "sms");
request.Headers.Add("user_key", tokens[0]);
request.Headers.Add("Session_key", tokens[1]);
string json = JsonSerializer.Serialize(sms);
request.Content = new StringContent(json, Encoding.UTF8)
{
Headers =
{
ContentType = new("application/json")
}
};
using HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string serverResponse = await response.Content.ReadAsStringAsync();
Run Code Online (Sandbox Code Playgroud)
但是,您可能希望使用IHttpClientFactory来创建HttpClient实例,因为这提供了多个好处 - 特别是池化底层消息处理程序,以避免性能问题。
您可能还想考虑使用扩展PostAsJsonAsync方法,它可以简化此代码。
| 归档时间: |
|
| 查看次数: |
26337 次 |
| 最近记录: |