使用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实现的更多相关文章

  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. 优化:mysql查询最近一条记录

    下策--查询出结果后将时间排序后取第一条 select * from a where create_time<="2017-03-29 19:30:36" order by ...

  2. PCB设计检查

    一.资料输入阶段1.在流程上接收到的资料是否齐全(包括:原理图.*.brd文件.料单.PCB设计说明以及PCB设计或更改要求.标准化要求说明.工艺设计说明文件)2.确认PCB模板是最新的3. 确认模板 ...

  3. Postman-----构建工作流程(用于某个请求完成后从指定的请求开始继续运行)

    使用场景: 当您开始运行某个集合时,所有的请求按照您在主程序中看到的顺序运行,但是在某些情况下,往往我们希望按顺序列出的请求A.B.C.D.E.F请求,在执行时不执行B.C请求,希望A请求完成后直接执 ...

  4. Postman----基础使用篇(没有接口文档的情况下如何着手做接口测试)

    [备注说明]内文中的图片由于页面的限制,图片显示不清晰,为了能更加的看清图片,请点击"图片",点击"右键"选择"在新标签页中打开图片",可查 ...

  5. bootstrap小知识

    栅格系统 1. row必须放到container和container-fluid里面 2. 你的内容应当放置于"列(column)"内,并且,只有"列(column)&q ...

  6. SpringBoot之旅第六篇-启动原理及自定义starter

    一.引言 SpringBoot的一大优势就是Starter,由于SpringBoot有很多开箱即用的Starter依赖,使得我们开发变得简单,我们不需要过多的关注框架的配置. 在日常开发中,我们也会自 ...

  7. 《HelloGitHub》第 35 期

    <HelloGitHub>第 35 期 兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编程新手.热爱编程. ...

  8. Flutter 实现原理及在马蜂窝的跨平台开发实践

    一直以来,跨平台开发都是困扰移动客户端开发的难题. 在马蜂窝旅游 App 很多业务场景里,我们尝试过一些主流的跨平台开发解决方案, 比如 WebView 和 React Native,来提升开发效率和 ...

  9. 卷积神经网络之LeNet

    开局一张图,内容全靠编. 上图引用自 [卷积神经网络-进化史]从LeNet到AlexNet. 目前常用的卷积神经网络 深度学习现在是百花齐放,各种网络结构层出不穷,计划梳理下各个常用的卷积神经网络结构 ...

  10. Typora程序员的记事本.Typora常用快捷操作

    Typora常用快捷操作 1.文本格式快捷编写 1.1.文本段落编写 a)#→宫格建→加输入内容→回车键,其中#表示标题一,##表示标题二以此类推至######为止 b)或者选中要修改文本的文本格式按 ...