当前位置: 首页 > 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消息收发机制。

相关文章:

【WPF】04 Http消息处理类

这里引入微软官方提供的HttpClient类来实现我们的目的。 首先&#xff0c;介绍一下官方HttpClient类的内容。 HttpClient 类 定义 命名空间: System.Net.Http 程序集: System.Net.Http.dll Source: HttpClient.cs 提供一个类&#xff0c;用于从 URI 标识的资源发送 HTTP 请…...

如何精准设置线程数,提升系统性能的秘密武器!

线程数设定多少更合适&#xff1f; 线程数的设定需要根据任务的类型、系统资源、以及并发需求来进行权衡。设定合适的线程数可以有效提升系统的性能&#xff0c;但设置过多或过少都会影响程序的效率。以下是一些关键因素和计算方法&#xff0c;用于帮助确定最合适的线程数。 …...

正则表达式:从入门到精通

正则表达式(Regular Expression,简称 regex)是一种强大的文本匹配和处理工具。它可以用于搜索、替换、验证和提取文本中的特定模式。本文将带您深入了解正则表达式的各个方面,从基础知识到高级技巧。 1. 基础知识 1.1 什么是正则表达式? 正则表达式是由一系列字符和特殊…...

CRMEB标准版Mysql修改sql_mode

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

linux驱动访问的地址为虚拟地址

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

基于SpringBoot+Vue+uniapp微信小程序的社区门诊管理系统的详细设计和实现(源码+lw+部署文档+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。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驱动(上半部分)

未完结&#xff0c;明天补全 IP核&#xff1a;集成的一个现有的模块 串口写好后基本不会再修改串口模块内部的一些逻辑&#xff0c;将串口.v文件添加进来&#xff0c;之后通过他的上层的接口去对他进行使用&#xff0c;所以我们打包IP&#xff0c;之后就不用去添加源文件了&a…...

MongoDB 如何做mapreduce

以下是在MongoDB中使用MapReduce的详细步骤和相关说明&#xff1a; 1. MapReduce的概念 MapReduce是一种用于大规模数据处理的编程模型&#xff0c;它由两个主要阶段组成&#xff1a;Map阶段和Reduce阶段。在MongoDB中&#xff0c;MapReduce操作允许在服务器端对数据进行批量…...

Vue是一套构建用户界面的渐进式框架,常用于构建单页面应用

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…...

c++ 桶排序(看这一篇就够了)

1. 概述 桶排序&#xff08;Bucket Sort&#xff09;又称箱排序&#xff0c;是一种比较常用的排序算法。其算法原理是将数组分到有限数量的桶里&#xff0c;再对每个桶分别排好序&#xff08;可以是递归使用桶排序&#xff0c;也可以是使用其他排序算法将每个桶分别排好序&…...

格点拉格朗日插值与PME算法

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

【LVGL快速入门(二)】LVGL开源框架入门教程之框架使用(UI界面设计)

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

jmeter中用csv data set config做参数化2

在jmeter中&#xff0c;使用csv data set config进行参数化是很重要的一个功能&#xff0c;但是这个功能的使用需要十分仔细和小心&#xff0c;因为细节之处往往决定着结果的正确与否。 举例&#xff1a; 一个登录接口用加密密码登录&#xff0c;一个登录接口用原始密码登录。…...

背包问题整理

1.01背包 题目描述 小明有一个容量为 V 的背包。 这天他去商场购物&#xff0c;商场一共有N 件物品&#xff0c;第 i 件物品的体积为 wi&#xff0c;价值为 vi。 小明想知道在购买的物品总体积不超过 V的情况下所能获得的最大价值为多少&#xff0c;请你帮他算算。 输入描述…...

基于Matlab车牌识别课程设计报告

Matlab车牌识别系统 分院&#xff08;系&#xff09; 信息科学与工程 专业 学生姓名 学号 设计题目 车牌识别系统设计 内容及要求&#xff1a; 车牌定位系统的目的在于正确获取整个图像中车牌的区域&#xff0c; 并识别出车牌号。通过设计实现车牌识别系…...

SSM框架实战小项目:打造高效用户管理系统 day3

前言 在前两篇博客中&#xff0c;后台已经搭建完毕&#xff0c;现在需要设计一下前端页面 webapp下的项目结构图 创建ftl文件夹&#xff0c;导入css和js 因为我们在后台的视图解析器中&#xff0c;设置了页面解析器&#xff0c;跳转路径为/ftl/*.ftl&#xff0c;所以需要ftl文件…...

一款现代化、可定制的跨平台文件浏览器,高颜值高效率的的管理神器!(附私活源码)

在如今这个注重效率的时代&#xff0c;我们每天都在与文件打交道。 但是&#xff0c;你有没有感觉到传统的文件管理器总是让人提不起劲&#xff1f;单调的外观&#xff0c;有限的功能&#xff0c;仿佛是上个世纪的产物。 一直以来&#xff0c;我都在寻找一款既颜值高又功能强…...

【C】二分查找与函数1

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

光纤光学的基本方程

一、麦克斯韦方程与亥姆赫兹方程 1.1 麦克斯韦方程 光纤是一种介质光波导&#xff0c;具有以下特点&#xff1a; ① 无传导电流 ② 无自由电荷 ③ 线性各向同性 推导出来的即为波动方程。为材料在真空中的磁导率&#xff0c;为材料在真空中的介电常数&#xff0c;n为材料折…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...