【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消息收发机制。
相关文章:

【WPF】04 Http消息处理类
这里引入微软官方提供的HttpClient类来实现我们的目的。 首先,介绍一下官方HttpClient类的内容。 HttpClient 类 定义 命名空间: System.Net.Http 程序集: System.Net.Http.dll Source: HttpClient.cs 提供一个类,用于从 URI 标识的资源发送 HTTP 请…...
如何精准设置线程数,提升系统性能的秘密武器!
线程数设定多少更合适? 线程数的设定需要根据任务的类型、系统资源、以及并发需求来进行权衡。设定合适的线程数可以有效提升系统的性能,但设置过多或过少都会影响程序的效率。以下是一些关键因素和计算方法,用于帮助确定最合适的线程数。 …...
正则表达式:从入门到精通
正则表达式(Regular Expression,简称 regex)是一种强大的文本匹配和处理工具。它可以用于搜索、替换、验证和提取文本中的特定模式。本文将带您深入了解正则表达式的各个方面,从基础知识到高级技巧。 1. 基础知识 1.1 什么是正则表达式? 正则表达式是由一系列字符和特殊…...

CRMEB标准版Mysql修改sql_mode
数据库配置 1.宝塔控制面板-软件商店-MySql-设置 2.点击配置修改,查找sql-mode或sql_mode (可使用CtrlF快捷查找) 3.复制 NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 然后替换粘贴,保存 注:MySQL8.0版本的 第三步用…...

linux驱动访问的地址为虚拟地址
在Linux驱动程序中,访问的内存地址通常是虚拟地址。这是因为Linux操作系统采用了虚拟内存管理机制,所有的用户空间和内核空间的内存地址都是虚拟地址。下面是一些关键点,以帮助更好地理解这个概念: 虚拟地址与物理地址࿱…...

基于SpringBoot+Vue+uniapp微信小程序的社区门诊管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…...

使用WPF写一个简单的开关控件
<Window x:Class"WPF练习.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/blend/2008"xm…...

FPGA采集adc,IP核用法,AD驱动(上半部分)
未完结,明天补全 IP核:集成的一个现有的模块 串口写好后基本不会再修改串口模块内部的一些逻辑,将串口.v文件添加进来,之后通过他的上层的接口去对他进行使用,所以我们打包IP,之后就不用去添加源文件了&a…...
MongoDB 如何做mapreduce
以下是在MongoDB中使用MapReduce的详细步骤和相关说明: 1. MapReduce的概念 MapReduce是一种用于大规模数据处理的编程模型,它由两个主要阶段组成:Map阶段和Reduce阶段。在MongoDB中,MapReduce操作允许在服务器端对数据进行批量…...

Vue是一套构建用户界面的渐进式框架,常用于构建单页面应用
学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把手教你开发炫酷的vbs脚本制作(完善中……) 4、牛逼哄哄的 IDEA编程利器技巧(编写中……) 5、面经吐血整理的 面试技…...

c++ 桶排序(看这一篇就够了)
1. 概述 桶排序(Bucket Sort)又称箱排序,是一种比较常用的排序算法。其算法原理是将数组分到有限数量的桶里,再对每个桶分别排好序(可以是递归使用桶排序,也可以是使用其他排序算法将每个桶分别排好序&…...

格点拉格朗日插值与PME算法
技术背景 在前面的一篇博客中,我们介绍了拉格朗日插值法的基本由来和表示形式。这里我们要介绍一种拉格朗日插值法的应用场景:格点拉格朗日插值法。这种场景的优势在于,如果我们要对整个实数空间进行求和或者积分,计算量是随着变量…...

【LVGL快速入门(二)】LVGL开源框架入门教程之框架使用(UI界面设计)
零.前置篇章 本篇前置文章为【LVGL快速入门(一)】LVGL开源框架入门教程之框架移植 一.UI设计 介绍使用之前,我们要学习一款LVGL官方的UI设计工具SquareLine Studio,使用图形化设计方式设计出我们想要的界面,然后生成对应源文件导入工程使用…...

jmeter中用csv data set config做参数化2
在jmeter中,使用csv data set config进行参数化是很重要的一个功能,但是这个功能的使用需要十分仔细和小心,因为细节之处往往决定着结果的正确与否。 举例: 一个登录接口用加密密码登录,一个登录接口用原始密码登录。…...
背包问题整理
1.01背包 题目描述 小明有一个容量为 V 的背包。 这天他去商场购物,商场一共有N 件物品,第 i 件物品的体积为 wi,价值为 vi。 小明想知道在购买的物品总体积不超过 V的情况下所能获得的最大价值为多少,请你帮他算算。 输入描述…...

基于Matlab车牌识别课程设计报告
Matlab车牌识别系统 分院(系) 信息科学与工程 专业 学生姓名 学号 设计题目 车牌识别系统设计 内容及要求: 车牌定位系统的目的在于正确获取整个图像中车牌的区域, 并识别出车牌号。通过设计实现车牌识别系…...

SSM框架实战小项目:打造高效用户管理系统 day3
前言 在前两篇博客中,后台已经搭建完毕,现在需要设计一下前端页面 webapp下的项目结构图 创建ftl文件夹,导入css和js 因为我们在后台的视图解析器中,设置了页面解析器,跳转路径为/ftl/*.ftl,所以需要ftl文件…...

一款现代化、可定制的跨平台文件浏览器,高颜值高效率的的管理神器!(附私活源码)
在如今这个注重效率的时代,我们每天都在与文件打交道。 但是,你有没有感觉到传统的文件管理器总是让人提不起劲?单调的外观,有限的功能,仿佛是上个世纪的产物。 一直以来,我都在寻找一款既颜值高又功能强…...

【C】二分查找与函数1
二分查找 练习: 给定一个整型的有序数组,在数组中找到指定的一个值,如: 1,2,3,4,5,6,7,8,9,10 找出7.如果找到了&#x…...

光纤光学的基本方程
一、麦克斯韦方程与亥姆赫兹方程 1.1 麦克斯韦方程 光纤是一种介质光波导,具有以下特点: ① 无传导电流 ② 无自由电荷 ③ 线性各向同性 推导出来的即为波动方程。为材料在真空中的磁导率,为材料在真空中的介电常数,n为材料折…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...