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;
             }
         }

下载项目

编译后Debug

HTTP模拟工具【C#/Winform源码】、Json绑定TreeView控件、使用了MetroModernUI、RestSharp、Dapper.Net、Newtonsoft.Json、SmartThreadPool这几个主要开源框架的更多相关文章

  1. 实例源码--Android的ListView控件的总结

    下载源码   技术要点: 1.ListView控件的总结 2.微信ListView气泡的实现 3.ListView仿优酷播放列表 4.ListView刷新列表 5.详细的源码注释 ...... 详细介 ...

  2. UiAutomator源码分析之获取控件信息

    根据上一篇文章<UiAutomator源码分析之注入事件>开始时提到的计划,这一篇文章我们要分析的是第二点: 如何获取控件信息 我们在测试脚本中初始化一个UiObject的时候通常是像以下 ...

  3. JGUI源码:实现日期控件显示(17)

    本文实现一个日期控件显示,日期控件看起来很复杂,其实原理很简单,大部分情况下我们直接使用别人做得好的日期控件就行,但有时候特殊需求,比如显示提醒之类的,恐怕第三方控件就不好实现了, 为了使程序逻辑看起 ...

  4. 驾照理论模拟考试系统Android源码下载

    ‍‍‍驾照理论模拟考试系统Android源码下载 <ignore_js_op> 9.png (55.77 KB, 下载次数: 0) <ignore_js_op> 10.png ...

  5. IPerf——网络测试工具介绍与源码解析(4)

    上篇随笔讲到了TCP模式下的客户端,接下来会讲一下TCP模式普通场景下的服务端,说普通场景则是暂时不考虑双向测试的可能,毕竟了解一项东西还是先从简单的情况下入手会快些. 对于服务端,并不是我们认为的直 ...

  6. XJar: Spring-Boot JAR 包加/解密工具,避免源码泄露以及反编译

    XJar: Spring-Boot JAR 包加/解密工具,避免源码泄露以及反编译 <?xml version="1.0" encoding="UTF-8" ...

  7. Java并发工具类CountDownLatch源码中的例子

    Java并发工具类CountDownLatch源码中的例子 实例一 原文描述 /** * <p><b>Sample usage:</b> Here is a pai ...

  8. Winform中怎样在工具类中对窗体中多个控件进行操作(赋值)

    场景 需求是在窗体加载完成后掉用工具类的方法,工具类中获取窗体的多个控件对象进行赋值. 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 ...

  9. [WinForm]WinForm跨线程UI操作常用控件类大全

    前言 在C#开发的WinForm窗体程序开发的时候,经常会使用多线程处理一些比较耗时之类的操作.不过会有一个问题:就是涉及到跨线程操作UI元素. 相信才开始接触的人一定会遇上这个问题. 为了解决这个问 ...

随机推荐

  1. centos6.5 scala环境变量

    [root@m1 ~]# vi /etc/profile export SCALA_HOME=/usr/local/soft/scala-2.11.8export PATH=$PATH:$SCALA_ ...

  2. Yii2.0中场景的使用小记

    熟悉Yii框架的人都知道,灵活的使用场景可以达到事半功倍的效果! 比如普通的数据的新增.修改,新增需要验证其中两个字段,而修改只需要验证其中一个字段:还有种情况,也是我们现在用到的,同一张表(同一个m ...

  3. CentOS 虚拟机安装详解

    第一步:安装 VMware 官方网站:www.vmware.com 下载百度云链接:http://pan.baidu.com/s/1bphDOWv 密码:0zix VMware 是一个虚拟 PC 的软 ...

  4. 咦,好像可以自己做个webapi框架了-IRouteHandler的使用

    当我们学习到一定程度的时候,我们会想要去深入了解代码底层的东西,也更想拥有一个属于自己的框架,当然,博主也正是如此.本文可能成为编写一个webapi框架的开端.有研究MVC框架的朋友会发现,mvc框架 ...

  5. spring-boot+mybatis开发实战:如何在spring-boot中使用myabtis持久层框架

    前言: 本项目基于maven构建,使用mybatis-spring-boot作为spring-boot项目的持久层框架 spring-boot中使用mybatis持久层框架与原spring项目使用方式 ...

  6. oracle 体系结构简介

    1.1.SGA(system global area) SGA是oracle Instance的基本组成部分,在示例启动是分配.是一组包含一个oracle实例的数据和控制信息的共享内存结构.主要用于存 ...

  7. redis学习(1)--- NoSQL介绍

    一.NoSQL介绍 1.什么是NoSQL NoSQL = Not Only SQL 非关系型数据库 2.为什么用NoSQL High performance - 高并发读写 Huge Storage ...

  8. 12.ThreadPoolExecutor线程池原理及其execute方法

    jdk1.7.0_79  对于线程池大部分人可能会用,也知道为什么用.无非就是任务需要异步执行,再者就是线程需要统一管理起来.对于从线程池中获取线程,大部分人可能只知道,我现在需要一个线程来执行一个任 ...

  9. NodeJS+Express+MongoDB 简单个人博客系统【Study笔记】

    Blog 个人博客系统 iBlog是在学习NodeJs时候一个练手项目Demo 系统支持用户注册/登录,内容文章查看,评论,后台管理(定制显示的分类版块,进行文章内容添加)超级管理员还可进行用户管理等 ...

  10. XAML: 获取元素的位置

    在之前讨论 ListView 滚动相关需求的文章中(UWP: ListView 中与滚动有关的两个需求的实现)曾经提到了获取元素相对位置的方法,即某元素相对另一元素的位置.现将所有相关方法再作整理,并 ...