使用前先在NuGet 中获取下列依赖包
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json;
class Program
{
static void Main(string[] args)
{
/**
* 学习HttpClient之前,我们得知道它有哪些优势!
* 1、HttpClient可以模仿表单上传
* 2、HttpClient可以指定多种请求动词
* 3、它比HttpWebRequest更加简洁
* 4、所有函数操作都是异步的
*
* 那么使用HttpClient需要注意哪些?
* 1、它是在.NET4.5中发布的,所以版本需要在4.5以上
* 2、使用不当,会损耗系统资源
* 3、不要使用using关键字包裹(无效,套接字资源不会跟随释放)
* 4、当使用PUT、POST动词时,在异步调用时要使用HttpContent传入表单数据,而GET、DELETE等使用URL传递即可
* */
//1、创建Uri对象(注意:这里的Uri和Url是有区别的)
Uri uri01 = new Uri("https://localhost:44389/");
//2、创建一个HttpClient对象
HttpClient hc = new HttpClient();
//2.5、设置指定要求webApi返回的数据类型,如果不指定,默认返回json
hc.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
//3、设置HttpClient客户端要获取资源数据的地址:BaseAddress属性
hc.BaseAddress = uri01;
/**
* 如果是POST或PUT提交,此处有一定变化
* */
3.1、将要传递的数据,序列化为json
//List<EmployeeModel> dataList = new List<EmployeeModel>();
//string postdata = JsonConvert.SerializeObject(dataList);
3.2、将json字符串转化为发送HTTP请求的内容
//HttpContent hcon = new StringContent(postdata);
3.3、设置HTTP请求上的Content-Type内容镖头值(这是比GET多做的一步操作)
//hcon.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
4、异步发送一个Post请求:PostAsync函数
//Task<HttpResponseMessage> pushAction = hc.PostAsync("api/employee", hcon);
//4、异步发送一个get请求:GetAsync函数
Task<HttpResponseMessage> pushAction = hc.GetAsync("api/employee");
//Task<HttpResponseMessage> pushAction = hc.GetAsync("api/employee?id=" + idStr); //如果是GET带参或者DELETE,直接URL传参即可(原因参考“URL传参和表单传参的区别”)
//5、获取请求后返回的数据:Result属性
HttpResponseMessage hrm = pushAction.Result;
//6、判断返回的数据状态
//StatusCode:获取返回的状态码
//HttpStatusCode.OK:等效于HTTP状态200,System.Net.HttpStatusCode.OK 指示请求成功
if (hrm.StatusCode == HttpStatusCode.OK)
{
//Content:获取HTTP响应消息的内容
//ReadAsStringAsync():异步将HTTP内容序列号为字符串
//Result:获取 Task<TResult> 结果值
string str = hrm.Content.ReadAsStringAsync().Result;
//6.5转换数据格式
//将JSON反序列化为List对象(JsonConvert需要在引用Newtonsoft.Json.dll)
List<EmployeeModel> emList = JsonConvert.DeserializeObject<List<EmployeeModel>>(str);
//7、释放资源
hc.Dispose();
Console.ReadKey();
}
}
}