阅读量:2
HttpClient请求类
在C#中,HttpClient类是.NET Framework提供的一个用于发送HTTP请求的第三方库。它不是.NET Framework的核心部分,因此可以说HttpClient请求是第三方的。
使用 HttpClient类发起GET请求
private async void button1_Click(object sender, EventArgs e) { try { // 发送天气预报的接口 // 1 创建爱httpClient对象,用来发起请求的 Client客户端 HttpClient client = new HttpClient(); // 2 发起请求 // getAsync 发起get请,并是一个异步的,返回值是task任务,sww HttpResponseMessage res = await client.GetAsync("http://192.168.113.74:3000/tianQi"); // 3 通过调用 EnsureSuccessStatusCode() 查看请求是否成功 res.EnsureSuccessStatusCode(); // 4 取出相应数据 res.Content相应数据内容 string data = await res.Content.ReadAsStringAsync(); this.richTextBox1.Text = data; } catch (Exception ex) { MessageBox.Show(ex.Message); } }
使用 HttpClient类发起POST请求
使用 HttpClient类发起POST请求(提交类型为application/x-www-form-urlencoded)
请求的格式为原生表单
第一中传递请求数据方法
private async void button2_Click(object sender, EventArgs e) { // PostAsync 发送Post请求,参数1是url,参数2 是FormUrlEncodedContent对象传递数据 // 1 创建客户端对戏那个发送post异步请求,返回值是响应数据 HttpResponseMessage res = await new HttpClient().PostAsync("http://192.168.113.74:3000/register", // 第一种数据 new FormUrlEncodedContent(new Dictionary<string, string>{ {"name","菠萝吹雪" }, {"psw","123456" }}) ); // 2 获取字符串数据 string data = await res.Content.ReadAsStringAsync(); this.richTextBox1.Text = data; }
第二种传递请求数据方法
private async void button2_Click(object sender, EventArgs e) { // PostAsync 发送Post请求,参数1是url,参数2 是FormUrlEncodedContent对象传递数据 // 1 创建客户端对戏那个发送post异步请求,返回值是响应数据 HttpResponseMessage res = await new HttpClient().PostAsync("http://192.168.113.74:3000/register", // 第二种数据传递的方式 new StringContent("name=菠萝吹雪222&psw=123456",Encoding.UTF8,"application/x-www-form-urlencoded") ); // 2 获取字符串数据 string data = await res.Content.ReadAsStringAsync(); this.richTextBox1.Text = data; }
使用 HttpClient类发起POST请求(请求类型为application/json)
请求的格式为json
private async void button3_Click(object sender, EventArgs e) { HttpResponseMessage res = await new HttpClient().PostAsync( "http://192.168.113.74:3000/register", // new StringContent 参数1 是json字符串 , 参数2 是utf8编码 , 参数3 请求内容编码格式 new StringContent("{\"name\":\"菠萝吹雪0011\",\"psw\":\"123456\"}",Encoding.UTF8,"application/json") ); string data = await res.Content.ReadAsStringAsync(); this.richTextBox1.Text = data; }
使用 HttpClient类发起POST请求(请求类型为Multipart/Formdata格式)上传文件
Multipart/Formdata格式在上传文件时使用
// 单文件上传 private async void button1_Click(object sender, EventArgs e) { // 1 选择文件上传 OpenFileDialog ofd = new OpenFileDialog(); if (ofd.ShowDialog() == DialogResult.OK) // 证明已经选择好文件 { // 获取选中文件名称 string name = ofd.FileName; // 2 获取文件流 FileStream fs = new FileStream(name,FileMode.Open); // 3 组织表单数据 // new MultipartContent()上传文件设置数据类型(自动设置content-type= Multipart/formdata格式) var formData = new MultipartFormDataContent(); // form表单数据对象,通过add方法把表单数据 // add方法 添加字符串数据 参数1传递值, 参数2是传递参数名 formData.Add(new StringContent("123"), "username"); formData.Add(new StringContent("123"), "age"); // add方法 添加的文件流 参数1对应路径上文件流 // 参数2存储文件字段名,和后天给定文件名保持一致 // 参数3文件名 自己随便起的文件名 formData.Add(new StreamContent(fs),"myFile","李昊轩.png"); // 4 发请求 HttpResponseMessage res = await Http.Client.PostAsync("http://192.168.113.74:3000/upload",formData); // 5 获取响应 string data = await res.Content.ReadAsStringAsync(); MessageBox.Show(data); } }
使用Get请求下载
以字节形式写入本地
HttpClient Client = new HttpClient(); private async void button1_Click(object sender, EventArgs e) { // 1 请求资源 HttpResponseMessage res = await Client.GetAsync("http://192.168.113.74:3000/托腮.png"); // 2 如果请求成功了 响应对应的数据 // 如果没成功了 报异常 res.EnsureSuccessStatusCode(); // 3 ReadAsByteArrayAsync 作为字节数组的方式进行异步读取 byte[] arr = await res.Content.ReadAsByteArrayAsync(); // 4 把字节数组写入本地 File.WriteAllBytes(@"2.jpg",arr); }