.net core 请求外部接口;ABP HttpClientFactory的使用
一. 首先最简单也是最重要的一部: 注入IHttpClientFactory
需要添加相关包 Volo.Abp.Http.Clent
但是引用显示的是:
using System.Net.Http;
但但是引用还是要引用的: Volo.Abp.Http.Clent
注入:
二. 正文
var client = HttpClientFactory.CreateClient("Login");
该"Login" 为标识: 这是为了性能,所以要定义一个唯一编号,如果编号一样它会用一个线程去请求,如果碰到新的变量会重新开一个线程去执行,这样就两个线程,性能是不是高很多.
如果需要加头部信息:
client.DefaultRequestHeaders.Add("ContentType", "application/json;charset=UTF-8");var AccessToken = "eyJhbGciOiJSUzI1NiIsImtpZCI6IkM2QTVBMjg5NkQzNzcyRDUwMUVGNDk1Nzc1NEExRjIzIiwidHlwIjoiYXQrand0In0.eyJuYmYiOjE2Mzg1MTgxMTUsImV4cCI6MTY3MDA1NDExNSwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzNDQiLCJhdWQiOiJDbG91ZFBsYXRmb3JtIiwiY2xpZW50X2lkIjoiQ2xvdWRQbGF0Zm9ybV9BcHAiLCJzdWIiOiIzOWZmZDE5My03NTljLTZhNTYtMjRkZC1lNzQ5ODM1ZmQxNTkiLCJhdXRoX3RpbWUiOjE2Mzg1MTgxMTQsImlkcCI6ImxvY2FsIiwibmFtZSI6IjEzNTM5Mzg1MzE0IiwicGhvbmVfbnVtYmVyX3ZlcmlmaWVkIjoiRmFsc2UiLCJlbWFpbCI6IjEzNTM5Mzg1MzE0QGRlZmF1bHQuaW8iLCJlbWFpbF92ZXJpZmllZCI6IkZhbHNlIiwiaWF0IjoxNjM4NTE4MTE1LCJzY29wZSI6WyJhZGRyZXNzIiwiQ2xvdWRQbGF0Zm9ybSIsImVtYWlsIiwib3BlbmlkIiwicGhvbmUiLCJwcm9maWxlIiwicm9sZSIsIm9mZmxpbmVfYWNjZXNzIl0sImFtciI6WyJwd2QiXX0.VqV_sO90EN8ctxwPwMgS9ohs3FTfTASnrq8T5-RVSGlSmEgU3gAlPUJJ0YZqYQ9TXLaxwSC394kW2yydDm6NJymhfu5PxU03G4bqP9EgbpXb5qeR25xaRg27CObZKYAZhdlv0vXaWETgIpkAzMfREfAode4XD-9lDfIzjHTrMRwJ2Dq0Rvy_t73Ab1Y7e1ss4YTUgegOP15ic3Fei2VhOG3U-ld1CzQGcYuYLjjNQ0-9me_ATnNGy1b1wwdwZRFyZJOqrHKFg"// 头部加Token
client.DefaultRequestHeaders.Add("authorization", "Bearer " + AccessToken);
头部加Token
1) Get请求:
//1. 无body 参数
var result = await client.GetAsync("https://localhost:44344/api/getList?keyword=666&name=777");//2. 有 body 参数
var user = new {userName = "110",password = "123456"};var body = JsonConvert.SerializeObject(user);var input= new StringContent(content: body,encoding: Encoding.UTF8,mediaType: "application/json");var result = await client.GetAsync("https://localhost:44344/api/getList?keyword=666&name=777", input);
2) Post请求, Put请求; Send请求 都跟上面一样的方式传参和加Body:
var user = new {userName = "110",password = "123456"};var body = JsonConvert.SerializeObject(user);var input= new StringContent(content: body,encoding: Encoding.UTF8,mediaType: "application/json");var result = await client.PostAsync("https://localhost:44344/api/create", input);
3) 需要对拿到结果进行解析成Json:
var resultJson = await result.Content.ReadAsStringAsync();
4) 根据实际返回的数据可以选择要不要再转成类, 方法如下:
引入 Newtonsoft.Json NuGet包
var resultDto = JsonConvert.DeserializeObject<ResultDto>(resultJson);
然后就得到你想要的类, 就可实现你后面的操作.