HTTP模拟工具【C#/Winform源码】、Json绑定TreeView控件、使用了MetroModernUI、RestSharp、Dapper.Net、Newtonsoft.Json、SmartThreadPool这几个主要开源框架
HTTP模拟工具
开发语言:C#/Winform
开发工具:Visual Studio 2017
数据库: SQLite
使用框架:界面-MetroModernUI
Http请求-RestSharp
ORM-Dapper.Net
Json解析-Newtonsoft.Json
多线程-SmartThreadPool
本来打算试一下Dapper.Net扩展框架-DapperExtensions,用了有点问题,不知什么原因后来弃用了,用回原生的Dapper.Net。
相关程序包被我删了,NuGet管理器自行还原。
项目地址:在文章最底部
来!上图!!
Get请求方式
Post请求方式
Http请求的核心代码
/// <summary> /// 请求 /// </summary> /// <param name="url"></param> /// <param name="jsonData"></param> /// <param name="methodType"></param> /// <returns></returns> private string RequestData(string url, Dictionary<string, string> headerData, string jsonData, Method methodType) { string urlHead = ""; string urlTail = ""; ) { urlHead = "http://"; urlTail = url.Substring("http://".Length); } ) { urlHead = "https://"; urlTail = url.Substring("https://".Length); } else { urlHead = "http://"; urlTail = url; } ]); ]) + urlTail.Split(].Length + ), methodType); if (methodType == Method.POST) request.AddParameter("application/json;charset=utf-8", jsonData, ParameterType.RequestBody); foreach (var item in headerData) { request.AddHeader(item.Key, item.Value); } // execute the request IRestResponse response = client.Execute(request); var content = response.Content; // raw content as string return content.ToString(); }
Json数据绑定TreeView控件核心代码
/// <summary> /// 绑定树形控件 /// </summary> /// <param name="treeView"></param> /// <param name="strJson"></param> private void BindTreeView(TreeView treeView, string strJson) { treeView.Nodes.Clear(); //string strJson = "1";//抛异常 //string strJson = "{}"; //string strJson = "{\"errcode\":0,\"errmsg\":\"查询成功\",\"datas\":[{\"c_ResourceType\":\"BootLogo\",\"c_Url\":\"/Upload/Magazine/4e09315d-7d92-4e6a-984d-80f684a24da8.jpg\"}]}"; //string strJson = "[{\"DeviceCode\":\"430BE-B3C6A-4E953-9F972-FC741\",\"RoomNum\":\"777\"},{\"DeviceCode\":\"BF79F -09807-EEA31-2499E-31A98\",\"RoomNum\":\"888\"}]"; if (IsJOjbect(strJson)) { JObject jo = (JObject)JsonConvert.DeserializeObject(strJson); foreach (var item in jo) { TreeNode tree; if (item.Value.GetType() == typeof(JObject)) { tree = new TreeNode(item.Key); AddTreeChildNode(ref tree, item.Value.ToString()); treeView.Nodes.Add(tree); } else if (item.Value.GetType() == typeof(JArray)) { tree = new TreeNode(item.Key); AddTreeChildNode(ref tree, item.Value.ToString()); treeView.Nodes.Add(tree); } else { tree = new TreeNode(item.Key + ":" + item.Value.ToString()); treeView.Nodes.Add(tree); } } } if (IsJArray(strJson)) { JArray ja = (JArray)JsonConvert.DeserializeObject(strJson); ; foreach (JObject item in ja) { TreeNode tree = new TreeNode("Array [" + (i++) + "]"); foreach (var itemOb in item) { TreeNode treeOb; if (itemOb.Value.GetType() == typeof(JObject)) { treeOb = new TreeNode(itemOb.Key); AddTreeChildNode(ref treeOb, itemOb.Value.ToString()); tree.Nodes.Add(treeOb); } else if (itemOb.Value.GetType() == typeof(JArray)) { treeOb = new TreeNode(itemOb.Key); AddTreeChildNode(ref treeOb, itemOb.Value.ToString()); tree.Nodes.Add(treeOb); } else { treeOb = new TreeNode(itemOb.Key + ":" + itemOb.Value.ToString()); tree.Nodes.Add(treeOb); } } treeView.Nodes.Add(tree); } } treeView.ExpandAll(); } /// <summary> /// 添加子节点 /// </summary> /// <param name="parantNode"></param> /// <param name="value"></param> public void AddTreeChildNode(ref TreeNode parantNode, string value) { if (IsJOjbect(value)) { JObject jo = (JObject)JsonConvert.DeserializeObject(value); foreach (var item in jo) { TreeNode tree; if (item.Value.GetType() == typeof(JObject)) { tree = new TreeNode(item.Key); AddTreeChildNode(ref tree, item.Value.ToString()); parantNode.Nodes.Add(tree); } else if (item.Value.GetType() == typeof(JArray)) { tree = new TreeNode(item.Key); AddTreeChildNode(ref tree, item.Value.ToString()); parantNode.Nodes.Add(tree); } else { tree = new TreeNode(item.Key + ":" + item.Value.ToString()); parantNode.Nodes.Add(tree); } } } if (IsJArray(value)) { JArray ja = (JArray)JsonConvert.DeserializeObject(value); ; foreach (JObject item in ja) { TreeNode tree = new TreeNode("Array [" + (i++) + "]"); parantNode.Nodes.Add(tree); foreach (var itemOb in item) { TreeNode treeOb; if (itemOb.Value.GetType() == typeof(JObject)) { treeOb = new TreeNode(itemOb.Key); AddTreeChildNode(ref treeOb, itemOb.Value.ToString()); tree.Nodes.Add(treeOb); } else if (itemOb.Value.GetType() == typeof(JArray)) { treeOb = new TreeNode(itemOb.Key); AddTreeChildNode(ref treeOb, itemOb.Value.ToString()); tree.Nodes.Add(treeOb); } else { treeOb = new TreeNode(itemOb.Key + ":" + itemOb.Value.ToString()); tree.Nodes.Add(treeOb); } } } } } /// <summary> /// 判断是否JOjbect类型 /// </summary> /// <param name="value"></param> /// <returns></returns> private bool IsJOjbect(string value) { try { JObject ja = JObject.Parse(value); return true; } catch (Exception ex) { return false; } } /// <summary> /// 判断是否JArray类型 /// </summary> /// <param name="value"></param> /// <returns></returns> private bool IsJArray(string value) { try { JArray ja = JArray.Parse(value); return true; } catch (Exception ex) { return false; } }
HTTP模拟工具【C#/Winform源码】、Json绑定TreeView控件、使用了MetroModernUI、RestSharp、Dapper.Net、Newtonsoft.Json、SmartThreadPool这几个主要开源框架的更多相关文章
- 实例源码--Android的ListView控件的总结
下载源码 技术要点: 1.ListView控件的总结 2.微信ListView气泡的实现 3.ListView仿优酷播放列表 4.ListView刷新列表 5.详细的源码注释 ...... 详细介 ...
- UiAutomator源码分析之获取控件信息
根据上一篇文章<UiAutomator源码分析之注入事件>开始时提到的计划,这一篇文章我们要分析的是第二点: 如何获取控件信息 我们在测试脚本中初始化一个UiObject的时候通常是像以下 ...
- JGUI源码:实现日期控件显示(17)
本文实现一个日期控件显示,日期控件看起来很复杂,其实原理很简单,大部分情况下我们直接使用别人做得好的日期控件就行,但有时候特殊需求,比如显示提醒之类的,恐怕第三方控件就不好实现了, 为了使程序逻辑看起 ...
- 驾照理论模拟考试系统Android源码下载
驾照理论模拟考试系统Android源码下载 <ignore_js_op> 9.png (55.77 KB, 下载次数: 0) <ignore_js_op> 10.png ...
- IPerf——网络测试工具介绍与源码解析(4)
上篇随笔讲到了TCP模式下的客户端,接下来会讲一下TCP模式普通场景下的服务端,说普通场景则是暂时不考虑双向测试的可能,毕竟了解一项东西还是先从简单的情况下入手会快些. 对于服务端,并不是我们认为的直 ...
- XJar: Spring-Boot JAR 包加/解密工具,避免源码泄露以及反编译
XJar: Spring-Boot JAR 包加/解密工具,避免源码泄露以及反编译 <?xml version="1.0" encoding="UTF-8" ...
- Java并发工具类CountDownLatch源码中的例子
Java并发工具类CountDownLatch源码中的例子 实例一 原文描述 /** * <p><b>Sample usage:</b> Here is a pai ...
- Winform中怎样在工具类中对窗体中多个控件进行操作(赋值)
场景 需求是在窗体加载完成后掉用工具类的方法,工具类中获取窗体的多个控件对象进行赋值. 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 ...
- [WinForm]WinForm跨线程UI操作常用控件类大全
前言 在C#开发的WinForm窗体程序开发的时候,经常会使用多线程处理一些比较耗时之类的操作.不过会有一个问题:就是涉及到跨线程操作UI元素. 相信才开始接触的人一定会遇上这个问题. 为了解决这个问 ...
随机推荐
- centos7下,解决Apache错误日志文件过大问题
1,日志文件太大问题 第一步:停止Apache服务的所有进程,删除 /var/log/httpd目录下的 error.log.access.log文件 第二步:打开 /etc/httpd/conf ...
- 虚拟机安装Android最详细教程
虚拟机想必大家都听说过,有些同学还用过.虚拟机可以模拟出一个操作系统,基于物理机创建.可以模拟常见的 Windows,ubuntu等等. 在使用虚拟机的过程中,想必大家都遇到过一些棘手的问题,尤其是安 ...
- Angular随笔第一课
一.调用angular 加载angular.js库(可以从google的cdn中加载类库,https://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/a ...
- 初入计算机图形学——BVH结构的实现
摘要: 本人水平有限,若有错误也请指正~ 光线追踪作为全局光照解决方案的一个重要思想,其与场景大量三角形的求交效率高低直接影响最终算法的速度,典型的一些渲染器都采用二叉树来将场景进行划分,最近自己实现 ...
- spring-boot+mybatis开发实战:如何在spring-boot中使用myabtis持久层框架
前言: 本项目基于maven构建,使用mybatis-spring-boot作为spring-boot项目的持久层框架 spring-boot中使用mybatis持久层框架与原spring项目使用方式 ...
- Ajax请求,跨域小坑
今天在上班的时候,被坐在旁边项目经理叫过去问了一个Ajax请求跨域的问题,一开始没理解清楚也还有对这个没有理解的透,后面被打击的要死. 当时的需求是需要测试一个已发布的api接口,需要在本地写测试程序 ...
- 黄油刀ButterKnife的使用
1.ButterKnife是一个由JakeWharton写的开源框架,它使用注解处理将属性和方法和View绑定,以生成模板代码. 2.作用: @1通过使用@BindView 注释属性取消了findVi ...
- 写代码中遇到的问题(php接收不到传过来的json数据,php使用utf8的用法)
今天写代码用python处理完数据,传给php服务器后,发现接收不到数据,因为是跨域,所以加了消息头:header('Access-Control-Allow-Origin:*');但是并没有什么卵用 ...
- XCOM2中敌对生物设计分析(Aliens篇)
Aliens Aliens作为游戏设定中入侵的外星人,有各式外貌及奇特的战斗方式,掌握一些高能科技或利用精神力量进行攻击 Sectoid 使用灵能战斗的外星人,并无高级版本,初级便会使用精神控制,生命 ...
- Api接口通用安全策略及实现-OSS.Core
这篇文章一直说写,迟迟没有动手,这两天看到一些应用接口数据被别人爬虫.短信接口被人高频率请求攻击等案列,感觉简单概述分享一下接口安全验证还是有必要的.毕竟当下基本都以客户端应用为主,如果前期疏忽,发布 ...