【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为材料折…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...

代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...
OCR MLLM Evaluation
为什么需要评测体系?——背景与矛盾 能干的事: 看清楚发票、身份证上的字(准确率>90%),速度飞快(眨眼间完成)。干不了的事: 碰到复杂表格(合并单元…...