DSAPI 简单WebAPI实现
使用DSAPI实现一个简单的WebAPI功能,以便各客户端访问。支持身份验证,支持基础防护。
新建项目(以下演示控制台示例),引用DSAPI.dll。
复制粘贴以下代码:
- Module Module1
- Private WithEvents SERVER As New DSAPI.网络.HTTP监听
- Sub Main()
- With SERVER
- .绑定端口 = 83
- .编码 = System.Text.Encoding.UTF8
- .允许外网连接 = True
- '.参数前导符 = "API"
- '.使用参数前导符 = True
- .传输使用Bas64加密 = False
- .启动监听()
- End With
- Dim IP As String = DSAPI.网络.本机内网IP
- Console.WriteLine("手机端访问时请使用 " & String.Concat("http://", IP, ":", SERVER.绑定端口))
- Console.WriteLine("访问示例:" & String.Concat("http://", IP, ":", SERVER.绑定端口, "/gettext&getmsg"))
- Console.ReadKey(True)
- End Sub
- Private Sub SERVER_收到被阻止的客户端请求(客户端 As DSAPI.网络.HTTP监听.监听客户端) Handles SERVER.收到被阻止的客户端请求
- SERVER.写入信息到指定客户端输出流(客户端, "非法访问")
- End Sub
- Private Sub SERVER_收到客户端请求(客户端 As DSAPI.网络.HTTP监听.监听客户端) Handles SERVER.收到客户端请求
- Console.WriteLine(客户端.传入的URL)
- '判断是否有"token"参数并且值为和本机时间"分钟"值差别在2以内,此检测仅为防止部分自动请求,可有可无
- 'If GetToken(客户端.传入的URL) = False Then Exit Sub
- Dim Values As List(Of KeyValue) = GetKeyValues(客户端.传入的URL)
- If Values Is Nothing Then Exit Sub
- Dim Lst As New List(Of String)
- For Each Kv As KeyValue In Values
- Select Case Kv.Key.ToLower
- Case "gettext"
- Lst.Add(String.Concat("Title=", Console.Title))
- Case "getmsg"
- Lst.Add(String.Concat("Msg=", "现在是测试阶段"))
- Case "settitle"
- Lst.Add("OK")
- Console.Title = Kv.Value
- Case "setmsg"
- Lst.Add("OK")
- Console.WriteLine(Kv.Value)
- End Select
- Next
- Dim Mode As String = "PC端"
- Dim Info As String = 客户端.浏览器信息.ToLower
- If Info.Contains("android") Then
- Mode = "安卓端"
- End If
- Lst.Add(String.Concat("您正在使用", Mode, "请求数据"))
- SERVER.写入信息到指定客户端输出流(客户端, Join(Lst.ToArray, vbCr))
- End Sub
- Private Function GetKeyValues(URL As String) As List(Of KeyValue)
- Try
- Dim Lst As New List(Of KeyValue)
- Dim S As String = URL.ToLower
- If S.Contains("&") Then
- Dim SP() As String = S.Split("&")
- For Each T As String In SP
- If T.Contains("=") = False Then
- Lst.Add(New KeyValue(T, ""))
- Else
- Lst.Add(New KeyValue(T.Substring(0, T.IndexOf("=")), T.Substring(T.IndexOf("=") + 1)))
- End If
- Next
- Else
- If URL.Contains("=") = False Then Return New List(Of KeyValue)({New KeyValue(URL, "")})
- Lst.Add(New KeyValue(URL.Substring(0, URL.IndexOf("=")), URL.Substring(URL.IndexOf("=") + 1)))
- End If
- Return If(Lst.Count = 0, Nothing, Lst)
- Catch
- Return Nothing
- End Try
- End Function
- Private Function GetToken(URL As String) As Boolean
- Try
- Dim S As String = URL.ToLower
- Dim Cmd As String = "token="
- If S.Contains(Cmd) = False Then Return False
- If S.Length < Cmd.Length + 2 Then Return False
- Dim M As String = S.Substring(S.IndexOf(Cmd) + Cmd.Length)
- If IsNumeric(M) = False Then Return False
- Dim N As Integer = M
- Return If(Math.Abs(M - Now.Minute) < 2, True, False)
- Catch
- Return False
- End Try
- End Function
- Friend Class KeyValue
- Public Key As String = ""
- Public Value As String = ""
- Sub New()
- End Sub
- Sub New(_Key As String, _Value As String)
- Key = _Key
- Value = _Value
- End Sub
- End Class
- End Module
调试运行效果如下
传入一个或多个参数
传入带值的参数
DSAPI 简单WebAPI实现的更多相关文章
- ASP.NET WEB API 2 框架揭秘 读书笔记(一)
第一章 概述 主要内容是介绍Web的基本概念,Restfull的基本概念及特性.最后介绍创建简单WebApi程序的步骤. Web的基本概念 IP/TCP协议簇分层,分为两种 链路层->网络层-& ...
- 通过granfana 以及prometheus 比较zulu 、oracle、openjdk 等jvm 运行
说明,此测试不完备,只是一个简单的集成,详细的需要进行jvm 参数的调整 环境准备 参考项目 https://github.com/rongfengliang/zulu-openjdk-openjdk ...
- C# HttpClient 使用 Consul 发现服务
试用了Overt.Core.Grpc, 把 GRPC 的使用改造得像 WCF, 性能测试也非常不错, 非常推荐各位使用. 但已有项目大多是 http 请求, 改造成 GRPC 的话, 工作量比较大, ...
- [.NET] WebApi 生成帮助文档及顺便自动创建简单的测试工具
==========最终的效果图========== ==========下面开始干活:生成帮助文档========== 一.创建 WebApi 项目 二.找到 HelpPageConfig.cs 并 ...
- 自己实现简单的AOP(五)使Demo适应webApi、亦可完成属性自动注入
在前文的Demo中,webApi的Controller是不能自动注入的,原因是 IHttpController 和 IController 是通过两个不同的途径进行激活的. IHttpControll ...
- 使用ASP.Net WebAPI构建REST服务(一)——简单的示例
由于给予REST的Web服务非常简单易用,它越来越成为企业后端服务集成的首选方法.本文这里介绍一下如何通过微软的Asp.Net WebAPI快速构建REST-ful 服务. 首先创建一个Asp.Net ...
- ASP.NET WEBAPI 简单CURD综合测试(asp.net MVC,json.net,sql基础存储过程和视图,sqlhelper,json解析)
草图 真正的后端是不管前端是什么平台,用什么语言的,JSON格式的数据应该可以应对.用ASP.NET WEBAPI尝试做一个后端,实现最基本的CURD,业务逻辑和数据库操作都放在后端,前端只需要正 ...
- 初试KONCKOUT+WEBAPI简单实现增删改查
初试KONCKOUT+WEBAPI简单实现增删改查 前言 konckout.js本人也是刚刚接触,也是初学,本文的目的是使用ko和asp.net mvc4 webapi来实现一个简单增删改查操作.Kn ...
- .NetCore WebApi——基于JWT的简单身份认证与授权(Swagger)
上接:.NetCore WebApi——Swagger简单配置 任何项目都有权限这一关键部分.比如我们有许多接口.有的接口允许任何人访问,另有一些接口需要认证身份之后才可以访问:以保证重要数据不会泄露 ...
随机推荐
- 深入css布局篇(3)完结 — margin问题与格式化上下文
深入css布局(3) - margin问题与格式化上下文 在css知识体系中,除了css选择器,样式属性等基础知识外,css布局相关的知识才是css比较核心和重要的点.今天我们来深入学习一下 ...
- appium+python+eclipse简单编写小示例!
Appium简单介绍! 一.appium分成3个部分来看,分别为:appium服务端.appium客户端.设备端 1.设备端 WebDriverAgentRunner 的应用,以后简称 WDA,这个应 ...
- Go中原始套接字的深度实践
1. 介绍 2. 传输层socket 2.1 ICMP 2.2 TCP 2.3 传输层协议 3. 网络层socket 3.1 使用Go库 3.2 系统调用 3.3 网络层协议 4. 总结 4.1 参考 ...
- Scala 开发遇到的坑
1. x.purchaseIntax.getOrElse(BigDecimal(0.00)) 可以直接写成 x.purchaseIntax.getOrElse(0)自动转换的 2. srcDataL ...
- [转载]学习Javascript闭包(Closure)
学习Javascript闭包(Closure) 源地址: http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures ...
- 来聊一聊不low的Linux命令——find、grep、awk、sed
前几天面试,被一位面试官嫌弃了"你的Linux命令有点low".被嫌弃也挺正常的,因为我的简历写的我自己都有点看不下去:了解Linux常用命令,如ls,tail -f等命令,基本满 ...
- Dynamics Business Central-如何配置VS Code连接BC环境
最近在研究Business Central,也就是以前的Dynamics NAV,需要配置Visual Studio Code连接BC环境,以下是配置的具体步骤. 1. VS Code下载,这个不多说 ...
- 访问System x3650 IMM2的几种方式
一.通过web浏览器访问 1.打开浏览器,在地址栏上输入IMM2的IP地址访问,打开登录页面后,输入用户名和密码 登录 PS:第一次登录IMM2时,初始的用户名为USERID,密码为PASSW0RD( ...
- 迷茫<第四篇:这两年>
时间匆匆而过,不知不觉已经是到北京的第二个年头,又到年末,2017年接近了尾声,提前预祝各位看官元旦节快乐! 今年3月份跳槽了一次,4月份以高级开发工程师职位进来现在的公司一直工作到现在,没有以前那么 ...
- Node.js 事件循环机制
Node.js 采用事件驱动和异步 I/O 的方式,实现了一个单线程.高并发的 JavaScript 运行时环境,而单线程就意味着同一时间只能做一件事,那么 Node.js 如何通过单线程来实现高并发 ...