当前位置: 首页 > 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为材料折…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

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

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

在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 …...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...