HttpClient _client;//依赖注入
//Get
public async Task<Result<T>> Get<T>(string url)
_client.DefaultRequestHeaders.Add("Authorization", GetAccessTokenHeaderByCache());//添加Header
var response = await _client.GetAsync(url);
response.EnsureSuccessStatusCode();
res = await response.Content.ReadAsStringAsync();//获取字符串
stream = await response.Content.ReadAsStreamAsync();//获取文件流
_client.DefaultRequestHeaders.Remove("Authorization");//删除Header
Dictionary<string, string> headers = new Dictionary<string, string>();
response.Headers.ToList().ForEach(a => headers.Add(a.Key, a.Value.Count() > 0 ? a.Value.ToList()[0] : ""));
return new Result<T>(res, headers);
//post
var postData = new StringContent(jsonData, Encoding.UTF8, "application/json");
HttpContent str = new StringContent(jsonData);
str.Headers.Remove("Content-Type");
str.Headers.Add("Content-Type", "application/json");
var response = await _client.PostAsync(_appDomian+url, str);
response.EnsureSuccessStatusCode();
json = await response.Content.ReadAsStringAsync();
//x-www-form-urlencoded
var content = new StringContent("image=" + HttpUtility.UrlEncode(base64Img), Encoding.UTF8, "application/x-www-form-urlencoded");
var response = await _client.PostAsync(url, content);
response.EnsureSuccessStatusCode();
var content = await response.Content.ReadAsStringAsync();
//form
MultipartFormDataContent multiContent = new MultipartFormDataContent()
{
{ new StringContent(idCard), "idCard"},//证件号
{ new ByteArrayContent(System.IO.File.ReadAllBytes(filePath)), "file", Path.GetFileName(filePath)},//文件流(支持文件格式docx和pdf)
};
var response = await _client.PostAsync(url, multiContent);
response.EnsureSuccessStatusCode();
json = await response.Content.ReadAsStringAsync();
//提交文件流
var response = await _client.PostAsync(url, new ByteArrayContent(System.IO.File.ReadAllBytes(filePath)));
response.EnsureSuccessStatusCode();
json = await response.Content.ReadAsStringAsync();
//当接口文档写了用appkey和sercet组合生成Authorization时,用”:“拼接,用 System.Text.Encoding.UTF8.GetBytes(id+":"+secret);
//转成byte,用string base64str = Convert.ToBase64String(bufOfUTF);转成base64string再赋值到hearder上
///包装返回数据实体
public class Result<T>
{
public bool Success { get; set; } = true;
public string Error { get; set; }
public Dictionary<string, string> Headers { get; set; }
public T Data { get; set; }
public Result(string data)
{
ChangeData(data);
}
public Result(string data, Dictionary<string, string> headers)
{
ChangeData(data);
Headers = headers;
}
public Result(bool success, string error)
{
this.Success = success;
this.Error = error;
}
public void ChangeData(string data)
{
if (!string.IsNullOrEmpty(data))
{
var tType = typeof(T);
string tName = tType.Name.ToLower();
switch (tName)
{
case "int":
case "string":
case "bool":
case "datetime":
case "decimal":
case "char":
case "double":
case "float":
case "long":
this.Data = (T)Convert.ChangeType(data, typeof(T));
break;
default:
this.Data = Newtonsoft.Json.JsonConvert.DeserializeObject<T>(data);
break;
}
}
}
}
C#各种请求
最新推荐文章于 2024-05-21 17:28:00 发布