主要讲解常见的get请求和post请求
GET
var client = new HttpClient();
//3秒钟不响应就超时
client.Timeout=TimeSpan.FromSeconds(3);
using HttpResponseMessage response = await client.GetAsync("todos/3");
var jsonResponse = await response.Content.ReadAsStringAsync();
Console.WriteLine($"{jsonResponse}\n");
POST
var client = new HttpClient();
var nowTimestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString();
client.DefaultRequestHeaders.Add("time",nowTimestamp);
//3秒钟不响应就超时
client.Timeout=TimeSpan.FromSeconds(3);
var param = new List<KeyValuePair<string, string>>();
param.Add(new KeyValuePair<string, string>("a", "xxxx"));
var response = await client.PostAsync(url, new FormUrlEncodedContent(param));
if (response.StatusCode == HttpStatusCode.OK)
{
var jsonStr = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<XXXObject>(jsonStr);
}
var errorMsg = await response.Content.ReadAsStringAsync();
post发送json数据
//param 传入的对象
var jsonData = JsonHelper.ObjectToJsonString(param);
var client = new HttpClient();
client.DefaultRequestHeaders
.Accept
.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.Timeout = TimeSpan.FromSeconds(60);
var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
try
{
//url 是请求链接
var response = await client.PostAsync(url, content);
var jsonStr = await response.Content.ReadAsStringAsync();
if (response.StatusCode == HttpStatusCode.OK)
{
return (true, jsonStr);
}
return (false, jsonStr);
}
catch (Exception ex)
{
return (false, ex.Message);
}
post其他请求只需要改变content内容即可
asp.net core中使用
//注入
services.AddHttpClient();
//构造函数使用
private readonly IHttpClientFactory _httpClientFactory;
public ValuesController(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
}
参考
https://www.cnblogs.com/xiaoxiaotank/p/16273773.html
https://github.com/tmenier/Flurl
https://learn.microsoft.com/zh-cn/dotnet/fundamentals/networking/http/httpclient
https://www.cnblogs.com/willick/p/net-core-httpclient.html
还是flurl用习惯了效率高一些