使用DSAPI实现一个简单的WebAPI功能,以便各客户端访问。支持身份验证,支持基础防护。

新建项目(以下演示控制台示例),引用DSAPI.dll。

复制粘贴以下代码:

  1. Module Module1
  2. Private WithEvents SERVER As New DSAPI.网络.HTTP监听
  3. Sub Main()
  4.  
  5. With SERVER
  6. .绑定端口 = 83
  7. .编码 = System.Text.Encoding.UTF8
  8. .允许外网连接 = True
  9. '.参数前导符 = "API"
  10. '.使用参数前导符 = True
  11. .传输使用Bas64加密 = False
  12. .启动监听()
  13. End With
  14. Dim IP As String = DSAPI.网络.本机内网IP
  15. Console.WriteLine("手机端访问时请使用 " & String.Concat("http://", IP, ":", SERVER.绑定端口))
  16. Console.WriteLine("访问示例:" & String.Concat("http://", IP, ":", SERVER.绑定端口, "/gettext&getmsg"))
  17.  
  18. Console.ReadKey(True)
  19. End Sub
  20.  
  21. Private Sub SERVER_收到被阻止的客户端请求(客户端 As DSAPI.网络.HTTP监听.监听客户端) Handles SERVER.收到被阻止的客户端请求
  22. SERVER.写入信息到指定客户端输出流(客户端, "非法访问")
  23. End Sub
  24.  
  25. Private Sub SERVER_收到客户端请求(客户端 As DSAPI.网络.HTTP监听.监听客户端) Handles SERVER.收到客户端请求
  26. Console.WriteLine(客户端.传入的URL)
  27. '判断是否有"token"参数并且值为和本机时间"分钟"值差别在2以内,此检测仅为防止部分自动请求,可有可无
  28. 'If GetToken(客户端.传入的URL) = False Then Exit Sub
  29. Dim Values As List(Of KeyValue) = GetKeyValues(客户端.传入的URL)
  30. If Values Is Nothing Then Exit Sub
  31. Dim Lst As New List(Of String)
  32. For Each Kv As KeyValue In Values
  33. Select Case Kv.Key.ToLower
  34. Case "gettext"
  35. Lst.Add(String.Concat("Title=", Console.Title))
  36. Case "getmsg"
  37. Lst.Add(String.Concat("Msg=", "现在是测试阶段"))
  38. Case "settitle"
  39. Lst.Add("OK")
  40. Console.Title = Kv.Value
  41. Case "setmsg"
  42. Lst.Add("OK")
  43. Console.WriteLine(Kv.Value)
  44. End Select
  45. Next
  46. Dim Mode As String = "PC端"
  47. Dim Info As String = 客户端.浏览器信息.ToLower
  48. If Info.Contains("android") Then
  49. Mode = "安卓端"
  50. End If
  51. Lst.Add(String.Concat("您正在使用", Mode, "请求数据"))
  52. SERVER.写入信息到指定客户端输出流(客户端, Join(Lst.ToArray, vbCr))
  53. End Sub
  54. Private Function GetKeyValues(URL As String) As List(Of KeyValue)
  55. Try
  56. Dim Lst As New List(Of KeyValue)
  57. Dim S As String = URL.ToLower
  58. If S.Contains("&") Then
  59. Dim SP() As String = S.Split("&")
  60. For Each T As String In SP
  61. If T.Contains("=") = False Then
  62. Lst.Add(New KeyValue(T, ""))
  63. Else
  64. Lst.Add(New KeyValue(T.Substring(0, T.IndexOf("=")), T.Substring(T.IndexOf("=") + 1)))
  65. End If
  66. Next
  67. Else
  68. If URL.Contains("=") = False Then Return New List(Of KeyValue)({New KeyValue(URL, "")})
  69. Lst.Add(New KeyValue(URL.Substring(0, URL.IndexOf("=")), URL.Substring(URL.IndexOf("=") + 1)))
  70. End If
  71. Return If(Lst.Count = 0, Nothing, Lst)
  72. Catch
  73. Return Nothing
  74. End Try
  75. End Function
  76. Private Function GetToken(URL As String) As Boolean
  77. Try
  78. Dim S As String = URL.ToLower
  79. Dim Cmd As String = "token="
  80. If S.Contains(Cmd) = False Then Return False
  81. If S.Length < Cmd.Length + 2 Then Return False
  82. Dim M As String = S.Substring(S.IndexOf(Cmd) + Cmd.Length)
  83. If IsNumeric(M) = False Then Return False
  84. Dim N As Integer = M
  85. Return If(Math.Abs(M - Now.Minute) < 2, True, False)
  86. Catch
  87. Return False
  88. End Try
  89. End Function
  90. Friend Class KeyValue
  91. Public Key As String = ""
  92. Public Value As String = ""
  93. Sub New()
  94. End Sub
  95. Sub New(_Key As String, _Value As String)
  96. Key = _Key
  97. Value = _Value
  98. End Sub
  99. End Class
  100. End Module

  

  

  调试运行效果如下

传入一个或多个参数

传入带值的参数

DSAPI 简单WebAPI实现的更多相关文章

  1. ASP.NET WEB API 2 框架揭秘 读书笔记(一)

    第一章 概述 主要内容是介绍Web的基本概念,Restfull的基本概念及特性.最后介绍创建简单WebApi程序的步骤. Web的基本概念 IP/TCP协议簇分层,分为两种 链路层->网络层-& ...

  2. 通过granfana 以及prometheus 比较zulu 、oracle、openjdk 等jvm 运行

    说明,此测试不完备,只是一个简单的集成,详细的需要进行jvm 参数的调整 环境准备 参考项目 https://github.com/rongfengliang/zulu-openjdk-openjdk ...

  3. C# HttpClient 使用 Consul 发现服务

    试用了Overt.Core.Grpc, 把 GRPC 的使用改造得像 WCF, 性能测试也非常不错, 非常推荐各位使用. 但已有项目大多是 http 请求, 改造成 GRPC 的话, 工作量比较大, ...

  4. [.NET] WebApi 生成帮助文档及顺便自动创建简单的测试工具

    ==========最终的效果图========== ==========下面开始干活:生成帮助文档========== 一.创建 WebApi 项目 二.找到 HelpPageConfig.cs 并 ...

  5. 自己实现简单的AOP(五)使Demo适应webApi、亦可完成属性自动注入

    在前文的Demo中,webApi的Controller是不能自动注入的,原因是 IHttpController 和 IController 是通过两个不同的途径进行激活的. IHttpControll ...

  6. 使用ASP.Net WebAPI构建REST服务(一)——简单的示例

    由于给予REST的Web服务非常简单易用,它越来越成为企业后端服务集成的首选方法.本文这里介绍一下如何通过微软的Asp.Net WebAPI快速构建REST-ful 服务. 首先创建一个Asp.Net ...

  7. ASP.NET WEBAPI 简单CURD综合测试(asp.net MVC,json.net,sql基础存储过程和视图,sqlhelper,json解析)

    草图   真正的后端是不管前端是什么平台,用什么语言的,JSON格式的数据应该可以应对.用ASP.NET WEBAPI尝试做一个后端,实现最基本的CURD,业务逻辑和数据库操作都放在后端,前端只需要正 ...

  8. 初试KONCKOUT+WEBAPI简单实现增删改查

    初试KONCKOUT+WEBAPI简单实现增删改查 前言 konckout.js本人也是刚刚接触,也是初学,本文的目的是使用ko和asp.net mvc4 webapi来实现一个简单增删改查操作.Kn ...

  9. .NetCore WebApi——基于JWT的简单身份认证与授权(Swagger)

    上接:.NetCore WebApi——Swagger简单配置 任何项目都有权限这一关键部分.比如我们有许多接口.有的接口允许任何人访问,另有一些接口需要认证身份之后才可以访问:以保证重要数据不会泄露 ...

随机推荐

  1. 深入css布局篇(3)完结 — margin问题与格式化上下文

    深入css布局(3) - margin问题与格式化上下文      在css知识体系中,除了css选择器,样式属性等基础知识外,css布局相关的知识才是css比较核心和重要的点.今天我们来深入学习一下 ...

  2. appium+python+eclipse简单编写小示例!

    Appium简单介绍! 一.appium分成3个部分来看,分别为:appium服务端.appium客户端.设备端 1.设备端 WebDriverAgentRunner 的应用,以后简称 WDA,这个应 ...

  3. Go中原始套接字的深度实践

    1. 介绍 2. 传输层socket 2.1 ICMP 2.2 TCP 2.3 传输层协议 3. 网络层socket 3.1 使用Go库 3.2 系统调用 3.3 网络层协议 4. 总结 4.1 参考 ...

  4. Scala 开发遇到的坑

    1.  x.purchaseIntax.getOrElse(BigDecimal(0.00)) 可以直接写成 x.purchaseIntax.getOrElse(0)自动转换的 2. srcDataL ...

  5. [转载]学习Javascript闭包(Closure)

    学习Javascript闭包(Closure)     源地址: http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures ...

  6. 来聊一聊不low的Linux命令——find、grep、awk、sed

    前几天面试,被一位面试官嫌弃了"你的Linux命令有点low".被嫌弃也挺正常的,因为我的简历写的我自己都有点看不下去:了解Linux常用命令,如ls,tail -f等命令,基本满 ...

  7. Dynamics Business Central-如何配置VS Code连接BC环境

    最近在研究Business Central,也就是以前的Dynamics NAV,需要配置Visual Studio Code连接BC环境,以下是配置的具体步骤. 1. VS Code下载,这个不多说 ...

  8. 访问System x3650 IMM2的几种方式

    一.通过web浏览器访问 1.打开浏览器,在地址栏上输入IMM2的IP地址访问,打开登录页面后,输入用户名和密码 登录 PS:第一次登录IMM2时,初始的用户名为USERID,密码为PASSW0RD( ...

  9. 迷茫<第四篇:这两年>

    时间匆匆而过,不知不觉已经是到北京的第二个年头,又到年末,2017年接近了尾声,提前预祝各位看官元旦节快乐! 今年3月份跳槽了一次,4月份以高级开发工程师职位进来现在的公司一直工作到现在,没有以前那么 ...

  10. Node.js 事件循环机制

    Node.js 采用事件驱动和异步 I/O 的方式,实现了一个单线程.高并发的 JavaScript 运行时环境,而单线程就意味着同一时间只能做一件事,那么 Node.js 如何通过单线程来实现高并发 ...