当前位置: 首页 > news >正文

【WPF】04 Http消息处理类

在这里插入图片描述

在这里插入图片描述

这里引入微软官方提供的HttpClient类来实现我们的目的。

首先,介绍一下官方HttpClient类的内容。

HttpClient 类

定义

命名空间:
System.Net.Http
程序集:
System.Net.Http.dll
Source:
HttpClient.cs
提供一个类,用于从 URI 标识的资源发送 HTTP 请求和接收 HTTP 响应。

public class HttpClient : System.Net.Http.HttpMessageInvoker

继承
Object - > HttpMessageInvoker - > HttpClient

示例:

// HttpClient is intended to be instantiated once per application, rather than per-use. See Remarks.
static readonly HttpClient client = new HttpClient();static async Task Main()
{// Call asynchronous network methods in a try/catch block to handle exceptions.try{using HttpResponseMessage response = await client.GetAsync("http://www.contoso.com/");response.EnsureSuccessStatusCode();string responseBody = await response.Content.ReadAsStringAsync();// Above three lines can be replaced with new helper method below// string responseBody = await client.GetStringAsync(uri);Console.WriteLine(responseBody);}catch (HttpRequestException e){Console.WriteLine("\nException Caught!");Console.WriteLine("Message :{0} ", e.Message);}
}

构造函数

函数描述
HttpClient()使用释放此实例时释放的 HttpClientHandler 初始化 HttpClient 类的新实例。
HttpClient(HttpMessageHandler)使用指定的处理程序初始化 HttpClient 类的新实例。 处理程序在释放此实例时被释放。
HttpClient(HttpMessageHandler, Boolean)使用提供的处理程序初始化 HttpClient 类的新实例,并指定在释放此实例时是否应释放该处理程序。

属性

属性描述
BaseAddress获取或设置发送请求时使用的 Internet 资源的统一资源标识符 (URI) 的基址。
DefaultProxy获取或设置全局 HTTP 代理。
DefaultRequestHeaders获取与每个请求一起发送的标题。
DefaultRequestVersion获取或设置对此 HttpClient 实例发出的后续请求使用的默认 HTTP 版本。
DefaultVersionPolicy获取或设置便捷方法中隐式创建的请求的默认版本策略,例如 GetAsync(String) 和 PostAsync(String, HttpContent)。
MaxResponseContentBufferSize获取或设置读取响应内容时要缓冲的最大字节数。
Timeout获取或设置请求超时前等待的时间跨度。

方法

方法描述
CancelPendingRequests()取消该实例所有挂起的请求。
DeleteAsync(String)以异步操作将 DELETE 请求发送给指定 URI。
DeleteAsync(String, CancellationToken)用以异步操作的取消标记发送 DELETE 请求到指定的 URI。
DeleteAsync(Uri)以异步操作将 DELETE 请求发送给指定 URI。
DeleteAsync(Uri, CancellationToken)用以异步操作的取消标记发送 DELETE 请求到指定的 URI。
Dispose()释放由 HttpMessageInvoker 使用的非托管资源和托管资源。
Dispose(Boolean)释放由 HttpClient 使用的非托管资源,并可根据需要释放托管资源。
Equals(Object)确定指定对象是否等于当前对象。
GetAsync(String)以异步操作将 GET 请求发送给指定 URI。
GetAsync(String, CancellationToken)用以异步操作的取消标记发送 GET 请求到指定的 URI。
GetAsync(String, HttpCompletionOption)用以异步操作的 HTTP 完成选项发送 GET 请求到指定的 URI。
GetAsync(String, HttpCompletionOption, CancellationToken)用以异步操作的 HTTP 完成选项和取消标记发送 GET 请求到指定的 URI。
GetAsync(Uri)以异步操作将 GET 请求发送给指定 URI。
GetAsync(Uri, CancellationToken)用以异步操作的取消标记发送 GET 请求到指定的 URI。
GetAsync(Uri, HttpCompletionOption)用以异步操作的 HTTP 完成选项发送 GET 请求到指定的 URI。
GetAsync(Uri, HttpCompletionOption, CancellationToken)用以异步操作的 HTTP 完成选项和取消标记发送 GET 请求到指定的 URI。
GetByteArrayAsync(String)将 GET 请求发送到指定 URI 并在异步操作中以字节数组的形式返回响应正文。
GetByteArrayAsync(String, CancellationToken)将 GET 请求发送到指定 URI 并在异步操作中以字节数组的形式返回响应正文。
GetByteArrayAsync(Uri)将 GET 请求发送到指定 URI 并在异步操作中以字节数组的形式返回响应正文。
GetByteArrayAsync(Uri, CancellationToken)将 GET 请求发送到指定 URI 并在异步操作中以字节数组的形式返回响应正文。
GetHashCode()作为默认哈希函数。
GetStreamAsync(String)将 GET 请求发送到指定 URI 并在异步操作中以流的形式返回响应正文。
GetStreamAsync(String, CancellationToken)将 GET 请求发送到指定 URI 并在异步操作中以流的形式返回响应正文。
GetStreamAsync(Uri)将 GET 请求发送到指定 URI 并在异步操作中以流的形式返回响应正文。
GetStreamAsync(Uri, CancellationToken)将 GET 请求发送到指定 URI 并在异步操作中以流的形式返回响应正文。
GetStringAsync(String)将 GET 请求发送到指定 URI 并在异步操作中以字符串的形式返回响应正文。
GetStringAsync(String, CancellationToken)将 GET 请求发送到指定 URI 并在异步操作中以字符串的形式返回响应正文。
GetStringAsync(Uri)将 GET 请求发送到指定 URI 并在异步操作中以字符串的形式返回响应正文。
GetStringAsync(Uri, CancellationToken)将 GET 请求发送到指定 URI 并在异步操作中以字符串的形式返回响应正文。
GetType()获取当前实例的 Type。
MemberwiseClone()创建当前 Object 的浅表副本。
PatchAsync(String, HttpContent)以异步操作方式将 PATCH 请求发送到指定为字符串的 URI。
PatchAsync(String, HttpContent, CancellationToken)以异步操作方式将带有取消令牌的 PATCH 请求发送到表示为字符串的 URI。
PatchAsync(Uri, HttpContent)以异步操作方式发送 PATCH 请求。
PatchAsync(Uri, HttpContent, CancellationToken)以异步操作方式发送带有取消令牌的 PATCH 请求。
PostAsync(String, HttpContent)以异步操作将 POST 请求发送给指定 URI。
PostAsync(String, HttpContent, CancellationToken)用以异步操作的取消标记发送 POST 请求。
PostAsync(Uri, HttpContent)以异步操作将 POST 请求发送给指定 URI。
PostAsync(Uri, HttpContent, CancellationToken)用以异步操作的取消标记发送 POST 请求。
PutAsync(String, HttpContent)以异步操作将 PUT 请求发送给指定 URI。
PutAsync(String, HttpContent, CancellationToken)用以异步操作的取消标记发送 PUT 请求。
PutAsync(Uri, HttpContent)以异步操作将 PUT 请求发送给指定 URI。
PutAsync(Uri, HttpContent, CancellationToken)用以异步操作的取消标记发送 PUT 请求。
Send(HttpRequestMessage)发送带有指定请求的 HTTP 请求。
Send(HttpRequestMessage, CancellationToken)发送带有指定请求和取消标记的 HTTP 请求。
Send(HttpRequestMessage, HttpCompletionOption)发送 HTTP 请求。
Send(HttpRequestMessage, HttpCompletionOption, CancellationToken)发送带有指定请求、完成选项和取消标记的 HTTP 请求。
SendAsync(HttpRequestMessage)以异步操作发送 HTTP 请求。
SendAsync(HttpRequestMessage, CancellationToken)以异步操作发送 HTTP 请求。
SendAsync(HttpRequestMessage, HttpCompletionOption)以异步操作发送 HTTP 请求。
SendAsync(HttpRequestMessage, HttpCompletionOption, CancellationToken) 以异步操作发送 HTTP 请求。
ToString() 返回表示当前对象的字符串。

案例

在工程中创建一个Http消息类 HttpMessage,并在这个类中分别实现Http的Get、Post、Push和Delete方法。

异步任务Get

public async Task<string> GetAsync<T>(string path)
{HttpClient client = new HttpClient();client.BaseAddress = new Uri("Your Uri");HttpResponseMessage response = await client.GetAsync(path);if (response.IsSuccessStatusCode){string content = await response.Content.ReadAsStringAsync();return content;}throw new Exception($"Error getting data from API: {response.StatusCode}");
}

异步任务Post

public async Task<T> PostAsync<T>(string path, object content)
{HttpClient client = new HttpClient();client.BaseAddress = new Uri("Your Uri");string jsonContent = JsonConvert.SerializeObject(content);StringContent stringContent = new StringContent(jsonContent, Encoding.UTF8, "application/json");HttpResponseMessage response = await client.PostAsync(path, stringContent);if (response.IsSuccessStatusCode){string result = await response.Content.ReadAsStringAsync();return JsonConvert.DeserializeObject<T>(result);}throw new HttpRequestException($"Error posting data to API: {response.StatusCode}");
}

异步任务Put

public async Task<HttpResponseMessage> PutAsync(string path, object content)
{HttpClient client = new HttpClient();client.BaseAddress = new Uri("Your Uri");string jsonContent = JsonConvert.SerializeObject(content);StringContent stringContent = new StringContent(jsonContent, Encoding.UTF8, "application/json");HttpResponseMessage response = await client.PutAsync(path, stringContent);return response;
}

异步任务Delete

public async Task<HttpResponseMessage> DeleteAsync(string path)
{HttpClient client = new HttpClient();client.BaseAddress = new Uri("Your Uri");HttpResponseMessage response = await client.DeleteAsync(path);return response;
}

响应类型

 // 响应类型  public class MyResponseType{public string Message { get; set; }// 其他属性...  }

根据以方法,可以通过C#实现网络的Http消息收发机制。

http://www.lryc.cn/news/464483.html

相关文章:

  • 如何精准设置线程数,提升系统性能的秘密武器!
  • 正则表达式:从入门到精通
  • CRMEB标准版Mysql修改sql_mode
  • linux驱动访问的地址为虚拟地址
  • 基于SpringBoot+Vue+uniapp微信小程序的社区门诊管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
  • 使用WPF写一个简单的开关控件
  • FPGA采集adc,IP核用法,AD驱动(上半部分)
  • MongoDB 如何做mapreduce
  • Vue是一套构建用户界面的渐进式框架,常用于构建单页面应用
  • c++ 桶排序(看这一篇就够了)
  • 格点拉格朗日插值与PME算法
  • 【LVGL快速入门(二)】LVGL开源框架入门教程之框架使用(UI界面设计)
  • jmeter中用csv data set config做参数化2
  • 背包问题整理
  • 基于Matlab车牌识别课程设计报告
  • SSM框架实战小项目:打造高效用户管理系统 day3
  • 一款现代化、可定制的跨平台文件浏览器,高颜值高效率的的管理神器!(附私活源码)
  • 【C】二分查找与函数1
  • 光纤光学的基本方程
  • 题解:CF584D Dima and Lisa
  • 【OD】【E卷】【真题】【100分】内存资源分配(PythonJavaJavaScriptC++C)
  • Linux基础项目开发day05:量产工具——页面系统
  • 保护企业终端安全,天锐DLP帮助企业智能管控终端资产
  • 2024市场营销第3次课
  • Python基础之函数的定义与调用
  • GPU在AI绘画中的作用以及GPU的选择
  • 【火山引擎】 Chat实践 | 大模型调用实践 | python
  • mysql学习教程,从入门到精通,SQL 注入(42)
  • 图论day60|108.冗余连接(卡码网) 、109.冗余连接II(卡码网)【并查集 摧毁信心的一题,胆小的走开!】
  • 即使是编程新手,也能利用ChatGPT编写高质量的EA