【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为材料折…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...
