【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消息收发机制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/890670.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

dbt doc 生成文档命令示例应用

DBT提供了强大的命令行工具&#xff0c;它使数据分析师和工程师能够更有效地转换仓库中的数据。dbt的一个关键特性是能够为数据模型生成文档&#xff0c;这就是dbt docs命令发挥作用的地方。本教程将指导您完成使用dbt生成和提供项目文档的过程。 dbt doc 命令 dbt docs命令有…

Gitxray:一款基于GitHub REST API的网络安全工具

关于Gitxray Gitxray是一款基于GitHub REST API的网络安全工具&#xff0c;支持利用公共 GitHub REST API 进行OSINT、信息安全取证和安全检测等任务。 Gitxray&#xff08;Git X-Ray 的缩写&#xff09;是一款多功能安全工具&#xff0c;专为 GitHub 存储库而设计。它可以用于…

STM32CUBEIDE的使用【三】RTC

于正点原子潘多拉开发板&#xff0c;使用stm32官方免费软件进行开发 CubeMx 配置 使用CubeMx 配置RTC 勾选RTC 设置日期和时间 配置LCD的引脚用来显示 STM32CUBEIDE 在usbd_cdc_if.c中重定向printf函数用于打印 #include <stdarg.h>void usb_printf(const char *f…

第十六章 RabbitMQ延迟消息之延迟插件优化

目录 一、引言 二、优化方案 三、核心代码实现 3.1. 生产者代码 3.2. 消息处理器 3.3. 自定义多延迟消息封装类 3.4. 订单实体类 3.5. 消费者代码 四、运行效果 一、引言 上一章节我们提到&#xff0c;直接使用延迟插件&#xff0c;创建一个延迟指定时间的消息&…

【C++算法】双指针

目录 一、快乐数&#xff1a; 二、有效三角形的个数&#xff1a; 三、盛最多水的容器&#xff1a; 四、复写0&#xff1a; 五、三数之和&#xff1a; 总结&#xff1a; 一、快乐数&#xff1a; 题目出处&#xff1a; 202. 快乐数 - 力扣&#xff08;LeetCode&#xff09…

ROS2 通信三大件之动作 -- Action

通信最后一个&#xff0c;也是不太容易理解的方式action&#xff0c;复杂且重要 1、创建action数据结构 创建工作空间和模块就不多说了 在模块 src/action_moudle/action/Counter.action 下创建文件 Counter.action int32 target # Goal: 目标 --- int32 current_value…

智能健康顾问:基于SpringBoot的系统

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

Qt:图片文字转base64程序

目录 一.Base64 1.编码原理 2.应用场景 3.优点 4.限制 5.变种 二.文字与Base64互转 1.ui设计 2.文字转Base64 3.Base64转文字 三.图片与Base64互转 1.ui设计 2.选择图片与图片路径 3.图片转Base64 4.Base64转图片 四.清空设置 五.效果 六.代码 base64conver…

PDF编辑不求人!4款高效工具,内容修改从此变得简单又快捷

咱们现在生活在一个数字时代&#xff0c;PDF文件可不就是工作、学习还有日常生活中经常要用的东西嘛。但遇到那些需要改动的PDF文件&#xff0c;是不是就觉得有点头疼啊&#xff1f; 因为传统的PDF文件真的不好编辑&#xff0c;这确实挺烦人的。不过呢&#xff0c;我今天要给你…

【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第三十九章 Linux Misc驱动

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

SpringBoot下的智能健康推荐引擎

3系统分析 3.1可行性分析 通过对本基于智能推荐的卫生健康系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本基于智能推荐的卫生健康系统采用SSM框架&#…

24秋面试笔记

文章目录 一、专业技能1.1 具备扎实的Java基础&#xff0c;熟练掌握面向对象编码规范、集合、反射以及Java8特性等。1.1.1 Java基础1.1.2 集合1.1.3 Java8新特性 1.2 熟悉常用的数据结构(链表、栈、队列、二叉树等)&#xff0c;熟练使用排序、动态规划、DPS等算法。1.2.1 数据结…

CountUp.js 实现数字增长动画 Vue

效果&#xff1a; 官网介绍 1. 安装 npm install --save countup.js2. 基本使用 // template <span ref"number1Ref"></span>// script const number1Ref ref<HTMLElement>() onMounted(() > {new CountUp(number1Ref.value!, 9999999).sta…

Centos7 搭建单机elasticsearch

以下是在 CentOS 7 上安装 Elasticsearch 7.17.7 的完整步骤&#xff1a;&#xff08;数据默认保存在/var/lib/elasticsearch下&#xff0c;自行更改&#xff09; 一、装 Java 环境 Elasticsearch 是用 Java 编写的&#xff0c;所以需要先安装 Java 运行环境。 检查系统中是…

弘景光电:以创新为翼,翱翔光学科技新蓝海

在科技日新月异的今天&#xff0c;光学镜头及模组作为智能设备的核心组件&#xff0c;其重要性日益凸显。广东弘景光电科技股份有限公司&#xff08;以下简称“弘景光电”&#xff09;正是在这一领域中&#xff0c;凭借其卓越的研发实力和市场洞察力&#xff0c;即将在创业板上…

001 Qt_从零开始创建项目

文章目录 前言什么是QtQt的优点Qt的应用场景创建项目小结 前言 本文是Qt专栏的第一篇文章&#xff0c;该文将会向你介绍如何创建一个Qt项目 什么是Qt Qt 是⼀个 跨平台的 C 图形⽤⼾界⾯应⽤程序框架 。它为应⽤程序开发者提供了建⽴艺术级图形界⾯所需的所有功能。它是完全…

英特尔新旗舰 CPU 将运行更凉爽、更高效,适合 PC 游戏

英特尔终于解决了台式机 CPU 发热和耗电的问题。英特尔的新旗舰 Core Ultra 200S 系列处理器将于 10 月 24 日上市&#xff0c;该系列专注于每瓦性能&#xff0c;比之前的第 14 代芯片运行更凉爽、更高效。这些代号为 Arrow Lake S 的处理器也是英特尔首款内置 NPU&#xff08;…

Unity3D 观察者模式

Unity3D 泛型事件系统 观察者模式 观察者模式是一种行为设计模式&#xff0c;通过订阅机制&#xff0c;可以让对象触发事件时&#xff0c;通知多个其他对象。 在游戏逻辑中&#xff0c;UI 界面通常会监听一些事件&#xff0c;当数据层发生变化时&#xff0c;通过触发事件&am…

LabVIEW提高开发效率技巧----状态保存与恢复

在LabVIEW开发中&#xff0c;保存和恢复程序运行时的状态是一个关键技巧&#xff0c;特别是在涉及需要暂停或恢复操作的应用中。通过使用 Flatten To String 和 Unflatten From String 函数&#xff0c;开发人员可以将程序当前的状态转换为字符串并保存&#xff0c;再在需要时恢…

决策树随机森林-笔记

决策树 1. 什么是决策树&#xff1f; 决策树是一种基于树结构的监督学习算法&#xff0c;适用于分类和回归任务。 根据数据集构建一棵树&#xff08;二叉树或多叉树&#xff09;。 先选哪个属性作为向下分裂的依据&#xff08;越接近根节点越关键&#xff09;&#xff1f;…