C# HttpClient Get Post简单封装
文章目录
- 前言
- 封装好的代码
- 测试接口
- 测试代码
前言
微软官方有Get和Post请求,我把他简单化处理一下
封装好的代码
public class MyHttpHelper{private string baseUrl;/// <summary>/// 基础Api/// </summary>public string BaseUrl{get{return baseUrl;}set{baseUrl = value;MyHttpClient = new HttpClient(){BaseAddress = new Uri(baseUrl)};}}public HttpClient MyHttpClient { get; set; }public MyHttpHelper(){}public MyHttpHelper(string baseUrl){BaseUrl = baseUrl;}/// <summary>/// 序列化返回值/// </summary>/// <typeparam name="T"></typeparam>/// <param name="api"></param>/// <param name="strParams"></param>/// <returns></returns>public async Task<T> JsonHttpGet<T>(string api, Dictionary<string, string> strParams){var res = await MyHttpGet(api, strParams);return await res.Content.ReadFromJsonAsync<T>();}/// <summary>/// 序列化返回值/// </summary>/// <typeparam name="T"></typeparam>/// <param name="api"></param>/// <param name="value"></param>/// <param name="strParams"></param>/// <returns></returns>public async Task<T> JsonHttpPost<T>(string api, object value, Dictionary<string, string> strParams){var res = await MyHttpPost(api, value, strParams);return await res.Content.ReadFromJsonAsync<T>();}/// <summary>/// 序列化请求/// </summary>/// <param name="api"></param>/// <param name="param"></param>/// <returns></returns>public async Task<HttpResponseMessage> MyHttpGet(string api, Dictionary<string, string> param){string paramStr = DictionaryToParams(param);return await MyHttpClient.GetAsync(api + paramStr);}/// <summary>/// 自定义的转发功能/// </summary>/// <param name="api"></param>/// <param name="dataname"></param>/// <param name="value"></param>/// <returns></returns>public Task<HttpResponseMessage> MyHttpPost(string api, object value, Dictionary<string, string> strParams){return MyHttpClient.PostAsync(api + DictionaryToParams(strParams), new StringContent(JsonConvert.SerializeObject(value), Encoding.UTF8, "application/json"));}/// <summary>/// 字典转参数/// </summary>/// <param name="param"></param>/// <returns></returns>public string DictionaryToParams(Dictionary<string, string> param){var res = "";if (param != null){var list = param.ToList();if(list.Count != 0){for (var i = 0; i < list.Count; i++){if (i != 0){res += "&";}res += $"{list[i].Key}={list[i].Value}";}res = "?" + res;}}return res;}}
测试接口
不懂的可以自己去看一下我的这篇文章
.NET Core webapi 从零开始在IIS上面发布后端接口

实体类
public class Person{public int Id { get; set; }public string Name { get; set; }}
/// <summary>/// 测试类/// </summary>[Route("api/[controller]/[action]")][ApiController]public class TestController : ControllerBase{/// <summary>/// 测试Num/// </summary>/// <param name="num"></param>/// <returns></returns>[HttpGet]public int TestNum(int num){return num;}/// <summary>/// 测试Post/// </summary>/// <param name="num"></param>/// <returns></returns>[HttpPost]public Person TestPerson(Person person){return person;}/// <summary>/// Person+Num/// </summary>/// <param name="num"></param>/// <param name="person"></param>/// <returns></returns>[HttpPost]public Person TestPersonNum(int num,Person person){person.Id += num;return person;}}
测试代码
static void Main(string[] args)
{var httpHelper = new MyHttpHelper("https://localhost:7291/");Task.Run(async() =>{var res = await httpHelper.JsonHttpGet<int>("/api/Test/TestNum", new Dictionary<string, string> { { "num", "7" } });Console.WriteLine(res);var res2 = await httpHelper.JsonHttpPost<Person>("/api/Test/TestPerson", new Person() { Id = 4, Name = "小王" }, null);Console.WriteLine(JsonConvert.SerializeObject(res2));var res3 = await httpHelper.JsonHttpPost<Person>("/api/Test/TestPersonNum", new Person() { Id = 4, Name = "小王" }, new Dictionary<string, string>() { { "Num", "4" } });Console.WriteLine(JsonConvert.SerializeObject(res3));});Console.WriteLine("Hello, World!");Console.ReadKey();
}

相关文章:
C# HttpClient Get Post简单封装
文章目录 前言封装好的代码测试接口测试代码 前言 微软官方有Get和Post请求,我把他简单化处理一下 封装好的代码 public class MyHttpHelper{private string baseUrl;/// <summary>/// 基础Api/// </summary>public string BaseUrl{get{return baseUr…...
创建网格(Grid/GridItem)
目录 1、概述 2、布局与约束 3、设置排列方式 3.1设置行列数量与占比 3.2、设置子组件所占行列数 3.3、设置主轴方向 3.4、在网格布局中显示数据 3.5、设置行列间距 4、构建可滚动的网格布局 5、实现简单的日历功能 6、性能优化 1、概述 网格布局是由“行”和“列”分…...
思科路由器忘记密码怎么重置
断电重启路由器,在开机过程中按下CtrlPause/break,或者只按下Pause/break(没有测试),在PT(Cisco Packet Tracert)中则需要按CtrlC。路由器会进入rommon >模式。 切换到0x2142模式࿰…...
JVM基础(2)——JVM内存模型
一、简介 JVM会加载类到内存中,所以 JVM 中必然会有一块内存区域来存放我们写的那些类。Java中有类对象、普通对象、本地变量、方法信息等等各种对象信息,所以JVM会对内存区域进行划分: JDK1.8及以后,上图中的方法区变成了Metasp…...
使用 Process Explorer 和 Windbg 排查软件线程堵塞问题
目录 1、问题说明 2、线程堵塞的可能原因分析 3、使用Windbg和Process Explorer确定线程中发生了死循环 4、根据Windbg中显示的函数调用堆栈去查看源码,找到问题 4.1、在Windbg定位发生死循环的函数的方法 4.2、在Windbg中查看变量的值去辅助分析 4.3、是循环…...
做科技类的展台3d模型用什么材质比较好---模大狮模型网
对于科技类展台3D模型,以下是几种常用的材质选择: 金属材质:金属材质常用于科技展台的现代感设计,如不锈钢、铝合金或镀铬材质。金属材质可以赋予展台一个科技感和高档感,同时还可以反射光线,增加模型的真实…...
EasyExcel简单实例(未完待续)
EasyExcel简单实例 准备工作场景一:读取 Student 表需求1:简单读取需求2:读取到异常信息时不中断需求3:读取所有的sheet工作表需求4:读取指定的sheet工作表需求5:从指定的行开始读取 场景二:写入…...
ROS2学习笔记一:安装及测试
目录 前言 1 ROS2安装与卸载 1.1 安装虚拟机 1.2 ROS2 humble安装 2 ROS2测试 2.1 topic测试 2.2 小海龟测试 2.3 RQT可视化 2.4 占用空间 前言 ROS2的前身是ROS,ROS即机器人操作系统(Robot Operating System),ROS为了“提高机器人…...
Xcode14.3.1真机调试iOS17的方法
Hello,大家好我是咕噜铁蛋!Xcode 是苹果官方开发工具,它提供了完整的开发环境和工具集,支持开发 iOS、macOS、watchOS 和 tvOS 应用程序。对于 iOS 开发者来说,Xcode 是必备的工具之一。而随着 iOS 系统的不断更新和升…...
主流大语言模型从预训练到微调的技术原理
引言 本文设计的内容主要包含以下几个方面: 比较 LLaMA、ChatGLM、Falcon 等大语言模型的细节:tokenizer、位置编码、Layer Normalization、激活函数等。大语言模型的分布式训练技术:数据并行、张量模型并行、流水线并行、3D 并行、零冗余优…...
Linux中vim查看文件某内容
一、编辑文件命令 [rootyinheqilin ~]# vim test.txt 1,在编辑的文件中连续按2次键盘的【g】键,光标会移动到文档开头第一行 2,输入一个大写 G,光标会跳转到文件的最后一行第一列(末行) 二、查看文件内容命令 gre…...
阿里云提示服务器ip暴露该怎么办?-速盾网络(sudun)
当阿里云提示服务器IP暴露的时候,这意味着您的服务器可能面临安全风险,因为黑客可以通过知道服务器的IP地址来尝试入侵您的系统。在这种情况下,您应该立即采取措施来保护您的服务器和数据。以下是一些建议: 更改服务器IP地址&…...
IP地址的网络安全防护和预防
网络安全对于保护个人和组织的信息资产至关重要,而IP地址是网络通信的基础。在这篇文章中,IP数据云将探讨IP地址的网络安全防护和预防措施,以确保网络的安全性和可靠性。 IP地址是互联网上每个设备在网络中的唯一标识符。有IPv4和IPv6两种类…...
数据挖掘在制造业中的预测与优化应用
随着大数据时代的到来,数据挖掘技术在各行各业的应用日益广泛,尤其在制造业中,其对于提升生产效率、降低运营成本、优化供应链管理等方面发挥着不可替代的作用。本文将探讨数据挖掘在制造业中的预测与优化应用,通过深入剖析实际案…...
Java面试之并发篇(一)
1、前言 本篇主要总结JAVA面试中关于并发相关的高频面试题。本篇的面试题基于网络整理,和自己编辑。在不断的完善补充哦。 2、简述程序、进程、线程、的基本概念? 2.1、程序 程序,是含有指令和数据的文件,被存储在磁盘或其他的…...
分布式全局id
分布式全局id snowflake 算法是 twitter 开源的分布式 id 生成算法,采用 Scala 语言实现,是把一个 64 位的 long 型的 id,1 个 bit 是不用的,用其中的 41 bits 作为毫秒数,用 10 bits 作为工作机器 id,12 …...
springboot 房屋租赁系统
spring boot mysql mybatis 前台后端...
TypeScript接口、对象
目录 1、TypeScript 接口 1.1、实例 1.2、联合类型和接口 1.3、接口和数组 1.4、接口和继承 1.5、单继承实例 1.6、多继承实例 2、TypeScript 对象 2.2、对象实例 2.3、TypeScript类型模板 2.4、鸭子类型(Duck typing) 1、TypeScript 接口 接口…...
Flask 菜品管理
common/libs/Helper.py getDictFilterField() 方法 用于在web/templates/food/index.html中展示菜品分类 如何能够通过food里面的cat_id获取分类信息呢?只能通过for循环,这样会很麻烦,所以定义了这个方法。 这个方法可以的查询返回结果…...
亚马逊实时 AI 编程助手 CodeWhisperer使用体验
文章目录 1:什么是CodeWhisperer ?2:试用3:上手体验 1:什么是CodeWhisperer ? 最近ChatGPT展现出强大AI能力给我们带来了深刻的影响,AI现在不是一个概念,基于AI的产品一定在各行各业…...
LWIP内存管理踩坑实录:从pbuf泄漏到pcb耗尽,我的嵌入式网络调试日记
LWIP内存管理踩坑实录:从pbuf泄漏到pcb耗尽,我的嵌入式网络调试日记 凌晨三点,调试器上的红色LED还在闪烁。这是我连续第三个通宵追踪LWIP的内存问题——设备在运行48小时后必然崩溃,日志里满是"pbuf_alloc failed"和&q…...
联想M920x黑苹果终极指南:从零构建完美macOS系统
联想M920x黑苹果终极指南:从零构建完美macOS系统 【免费下载链接】M920x-Hackintosh-EFI Hackintosh Opencore EFIs for M920x 项目地址: https://gitcode.com/gh_mirrors/m9/M920x-Hackintosh-EFI 你是否想让联想M920x这款紧凑型主机运行macOS系统ÿ…...
【YOLOv11工业级实战】35. DeepStream集成实战——构建高并发视频分析管道
摘要:在智慧交通、智慧工地等工业场景中,多路高清视频的实时分析面临高并发、低延迟、低资源占用的核心诉求。传统PyTorch逐帧推理方案因CPU解码瓶颈、内存拷贝频繁等问题,无法满足500路以上视频流的并发处理需求。本文以NVIDIA DeepStream框架为核心,结合YOLOv11目标检测模…...
OpenClaw入门到精通:GLM-4.7-Flash自动化全流程解析
OpenClaw入门到精通:GLM-4.7-Flash自动化全流程解析 1. 为什么选择OpenClawGLM-4.7-Flash组合 去年冬天,当我第一次尝试用Python脚本批量处理公司周报时,发现传统自动化工具在面对非结构化数据时显得力不从心。直到接触了OpenClaw这个能直接…...
服务器 网络科技运行
服务器是网络科技运行的核心支撑,承担着数据存储、处理、应用部署及资源调度等关键职能,在网络科技领域,服务器的稳定运行直接关系到整个业务系统的顺畅与否,无论是企业内部的办公系统、数据管理平台,还是面向公众的互…...
3月17枚举
package com.fangfa.day05.Enum;public class EnurmerDemo1 {public static void main(String[] args) {//为什么其他类里可以类名.对象名 因为这个对象名被static修饰了//若不修饰不行System.out.println(Season.SPRING);} } class Season{/*** Description* author Mao Ree…...
高基数路由器的最佳拍档?深入浅出解析Flattened Butterfly拓扑的优缺点与适用场景
高基数路由器的最佳拍档?深入浅出解析Flattened Butterfly拓扑的优缺点与适用场景 在构建大规模互连网络时,拓扑结构的选择往往决定了系统的性能上限和成本下限。当工程师面对高基数路由器(High-Radix Router)的选型时,…...
跨平台B站工具箱:BiliTools让你的视频下载体验焕然一新
跨平台B站工具箱:BiliTools让你的视频下载体验焕然一新 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持视频、音乐、番剧、课程下载……持续更新 项目地址: https://gitcode.com/GitHub_Trending/bilit/Bil…...
80+经典游戏宽屏焕新:WidescreenFixesPack重塑怀旧体验
80经典游戏宽屏焕新:WidescreenFixesPack重塑怀旧体验 【免费下载链接】WidescreenFixesPack Plugins to make or improve widescreen resolutions support in games, add more features and fix bugs. 项目地址: https://gitcode.com/gh_mirrors/wi/WidescreenFi…...
1Panel新手必看:5分钟搞定RustDesk远程桌面搭建(含端口配置避坑指南)
1Panel极速部署RustDesk:零基础构建安全远程桌面的完整指南 当我们需要远程管理Linux服务器时,一个轻量级、开源的远程桌面解决方案往往比商业软件更灵活可控。RustDesk作为新兴的远程工具,凭借其跨平台特性和自建服务器的能力,正…...
