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

题解:CF584D Dima and Lisa
前置知识 哥德巴赫猜想,任一大于 2 2 2 的偶数都可写成两个素数之和。 思路 我们可以分类讨论一下。 n n n 一开始就是质数。直接输出即可 n n n 是偶数,那么一定可以写成两个质数之和。那么暴力枚举两个质数即可。 如果以上均不符合,计…...

【OD】【E卷】【真题】【100分】内存资源分配(PythonJavaJavaScriptC++C)
题目描述 有一个简易内存池,内存按照大小粒度分类,每个粒度有若干个可用内存资源,用户会进行一系列内存申请,需要按需分配内存池中的资源返回申请结果成功失败列表。 分配规则如下: 分配的内存要大于等于内存的申请…...

Linux基础项目开发day05:量产工具——页面系统
文章目录 一、数据结构抽象page_manager.h 二、页面管理器page_manager.c 三、单元测试1、main.page.c2、page_test.c3、Makefile修改3.1、unittest中的Makefile3.2、page中的Makefile 四、上机实验 前言 前面实现了显示、输入、文字、UI系统,现在我们就来实现页面的…...

保护企业终端安全,天锐DLP帮助企业智能管控终端资产
为有效预防员工非法调包公司的软硬件终端资产,企业管理员必须建立高效的企业终端安全管控机制,确保能够即时洞察并确认公司所有软硬件资产的状态变化。这要求企业要有一套能够全面管理终端资产的管理系统,确保任何未经授权的资产变动都能被迅…...

2024市场营销第3次课
品牌管理 1.认识品牌 品牌定义:一个名称、术语、标志、符号或设计,或者是它们的组合,用来识别某个销售商或某一群销售商的产品或服务,并使其与竞争者的产品或服务区分开来。 品牌构成:成功品牌的构成都是由外及内的…...

Python基础之函数的定义与调用
一、函数的定义 在Python中,函数是一段可重复使用的代码块,用于完成特定的任务。可以使用def关键字来定义函数。 语法如下: def function_name(parameters): """docstring""" # function body return expres…...

GPU在AI绘画中的作用以及GPU的选择
大家好,我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具,拥抱AI时代的到来。 GPU在AI绘画中的作用: GPU在A…...

【火山引擎】 Chat实践 | 大模型调用实践 | python
目录 一 前期工作 二 Doubao-pro-4k_test实践 一 前期工作 1 已在火山方舟控制台在线推理页面创建了推理接入点 ,接入大语言模型并获取接入点 ID。 2 已参考安装与初始化中的步骤完成 SDK 安装和访问凭证配置...

mysql学习教程,从入门到精通,SQL 注入(42)
1、 SQL 注入 SQL 注入是一种严重的安全漏洞,它允许攻击者通过操纵 SQL 查询来访问、修改或删除数据库中的数据。由于 SQL 注入的潜在危害,我不能提供具体的恶意代码示例。然而,我可以向你展示如何防御 SQL 注入,并解释其工作原理…...

图论day60|108.冗余连接(卡码网) 、109.冗余连接II(卡码网)【并查集 摧毁信心的一题,胆小的走开!】
图论day60|108.冗余连接(卡码网)、109.冗余连接II(卡码网)【并查集 摧毁信心的一题,胆小的走开!】 108.冗余连接(卡码网)109.冗余连接II(卡码网)【并查集 摧毁…...