AServer是基于ASP.NET Core Kestrel封装的一个超迷你http服务器。它可以集成进你的Core程序里,用来快速的响应Http请求,而不需要集成整个ASP.NET Core MVC 框架。

一:什么是ASever?

  AServer就像它的名字一样,Just a server,它的功能非常简单,它唯一的功能就是用来对Http请求做出响应。以前我们开发一个.NET程序,比如控制台程序,Windows服务等,如果需要对外提供接口,我们通常会在程序里集成WCF,使用WCF对外提供RPC接口。但是现在是.NET Core的时代,我们已经没有办法选择WCF了。而且这些需求往往很简单,只是想要对外提供几个接口,查询一些数据,或者触发一些功能,如果我们集成整个ASP.NET Core MVC框架又觉得是杀鸡用牛刀的感觉。这个时候你或许可以选择AServer。AServer很简单,它仅仅是一个dll,这或许正是你想要的。

github地址:https://github.com/kklldog/AServer 欢迎star。

二:使用AServer

  如何使用AServer呢,非常简单,让我们看几个示例代码就明白了。假设我们现在有个跑定时任务的控制台程序,这个程序需要对外提供3个Http接口:

  1.查询所有任务

  2.新增一个任务

  3.删除一个任务

  下面演示如何使用AServer来实现这3个接口。

  1.新建一个Core的控制台程序

  

  2.从nuget安装AServer

  

  3.实例化一个Server

  直接new一个Server对象,它默认会监听本地5000端口。

      static void Main(string[] args){var server  = new Agile.AServer.Server();}

  4.实现查询所有任务接口

  该接口的请求地址为/api/tasks,请求方法为GET,返回任务列表数组。

  5.实现新增任务接口

  该接口的请求地址为/api/tasks,请求方法为POST,如果新增成功则返回文本"ok"。

  6.实现删除任务接口

  该接口的请求地址为/api/tasks/:taskId,请求方法为DELETE,如果删除成功则返回文本"ok"。

 7.启动服务器

  调用Server.Run()方法启动服务器。

 8.测试

  至此,演示代码编写完了。运行这个控制台程序,然后用postman来测试下这3个接口,是否能响应我们预期的结果。

  

  测试查询任务接口

  

  测试新增任务接口

  

  测试删除任务接口

  

  可以看到我们对这3个接口的测试都返回了预期的值,说明AServer正确的响应了我们的请求。

  9.通过继承HttpHandlerController实现接口

  另外,还可以通过继承HttpHandlerController来处理http请求。该方法更接近ASP.NET MVC惯用的方法。编写一个class继承自HttpHandlerController,对里面的方法添加[HttpHandler] attribute来指定请求地址跟方法。需要注意的是里面的方法我们约定了签名:Task (Reqeust,Response)。

  下面的代码演示了如果通过继承HttpHandlerController来实现一系列汽车信息管理的api接口:

 10.Request/Response

  通过上面的演示代码,不难发现,AServer对Http请求的处理都封装在HttpHandler对象中。HttpHandler类有3个属性,Method,Path,Handler。Method表示Http请求的方式,Path表示请求的路径,Handler是一个Func,业务逻辑就写在这里。Handler的这个Func的方法签名为Task (Request,Response)。

其中Request封装了本次Http请求的请求部分的参数,它会解析Http请求,把headers,queryStrings,params解析成dynamic对象,所以调用参数的时候跟写JavaScript类似,如:

var name = req.Params.name;
var id = req.Query.id;
var contentType = req.Header.contentType;

Response则封装了几个Write方法,用来写响应的内容,状态码,Header等内容,如:

resp.Write("ok");
resp.Write("NotFound", HttpStatusCode.NotFound, null);
var headers = new List<KeyValuePair<string, string>>();
headers.Add(new KeyValuePair<string, string>("Content-Type", "charset=utf-8"));
resp.Write($"user 001 be deleted .", HttpStatusCode.OK, headers);
resp.WriteJson("{name:'kklldog'}");

三:总结

  对于AServer的介绍也差不多了。希望对同学们有帮助。AServer虽然功能很简单,就是对Http请求做出响应。但是我也可以说AServer的功能很强大,因为它能对Http请求做出响应。因为从Http的本质上来说,AServer几乎可以实现所有基于Http的功能。我们可以用它来实现restful api,可以用来实现各种管理系统,可以用来实现cms系统。。。

  不管使用ASP.NET MVC或者JSP或者node express等web框架开发bs/web系统的时候其实套路都是一样的,概况一下就这么几步:

  1.拦截请求(路由)

  2.解析请求携带的参数(url,headers,querystrings,body等)

  3.根据参数处理业务(查数据,持久数据等)

  4.根据业务处理结果做出响应(html,json,xml等)

  我们只要了解这个套路,不管用什么技术,什么框架,其实都是一样的,只要查下api,弄明白怎么获取http请求的参数,怎么做出响应。AServer也实现了这个套路。如果有心的话,对AServer实现过滤器,参数绑定,视图引擎等功能,那基本上就是一个简易的mvc框架了。当然如果你的业务复杂,请选用ASP.NET Core MVC,它功能强大,性能强悍;如果你只是需要实现几个简单的Http接口,可以考虑AServer来实现。

原文地址: https://www.cnblogs.com/kklldog/p/agileaerver.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

AServer - 基于Asp.net core Kestrel的超迷你http服务器相关推荐

  1. .net 文件服务器系统,File-service基于ASP.NET Core的可伸缩、通用的文件服务器

    一个基于ASP.NET Core的可伸缩.通用的文件服务器. 通常后端项目可能会有头像.图片.音频.视频等上传/下载需求,这些需求都可以抽象为文件服务. 功能特点支持Linux(推荐).Windows ...

  2. 基于ASP.Net Core开发的一套通用后台框架

    基于ASP.Net Core开发一套通用后台框架 写在前面 这是本人在学习的过程中搭建学习的框架,如果对你有所帮助那再好不过.如果您有发现错误,请告知我,我会第一时间修改. 知其然,知其所以然,并非重 ...

  3. 如何基于asp.net core的Identity框架在mysql上作身份验证处理

    首先了解这个概念,我一开始也是理解和掌握基本的概念,再去做程序的开发.Identity框架是微软自己提供,基于.net core平台,可拓展.轻量 级.面向多个数据库的身份验证框架.IdentityS ...

  4. 基于ASP.NET Core SignalR的流式传输

    基于ASP.NET Core SignalR的流式传输 SignalR概述 SignalR是ASP.NET Core下非常流行的实现Web实时功能的库.微软再文档中列出了适合的应用场景: 适合 Sig ...

  5. .NET Conf 2020 - 基于ASP.NET Core构建可热插拔的插件化系统

    文章标题:.NET Conf 2020 - 基于ASP.NET Core构建可热插拔的插件化系统 作者:Lamond Lu 项目地址:https://github.com/lamondlu/CoolC ...

  6. 推荐一本基于ASP.NET Core 3.1的实战来了

    第一本基于 ASP.NET Core 3.1 的实战书来了 我脱产花费了一年时间创作书籍<深入浅出 ASP.NET Core>,终于上架了.目前天猫.京东等主流平台均有销售. 这本书是基于 ...

  7. 基于ASP.NET Core 3.0的ABP v0.21已发布

    在微软发布仅仅一个小时后, 基于ASP.NET Core 3.0的ABP v0.21也紧跟着发布了. v0.21没有新功能.它只是升级到稳定的ASP.NET Core 3.0. 查看v0.20发行说明 ...

  8. 基于ASP.NET Core的模块化设计: 虚拟文件系统

    土牛亲自录制的本文介绍视频 Abp中文网(https://cn.abp.io/)提供翻译字幕 基于ASP.NET Core的模块化设计: 虚拟文件系统 简介 创建模块化的应用程序很困难. 构建模块化的 ...

  9. 基于Asp.Net Core打造轻量级内部服务治理RPC(二 远程服务设计)

    紧接上一篇<基于Asp.Net Core打造轻量级内部服务治理RPC(一)>文章.本文主要讲解基于Asp.Net Core的远程服务设计和实现. 在上一篇中讲过,服务提供者提供的服务实际上 ...

最新文章

  1. Interactive Mathematics Study
  2. 在C#代码中获取Silverlight的初始化initparams参数
  3. 采用HttpModules来重写URLs(实践篇)
  4. Linux并发与同步专题 (1)原子操作和内存屏障
  5. 问管理:不同时期,人员离职,项目怎么办?
  6. html二级导航栏随一级居中,html – 1.在css中链接不起作用2.如何垂直居中导航栏并在每个导航栏上添加填充...
  7. 重建二叉树(基于js)
  8. Java—这把线程池ThreadPoolExecutor操作,你学会了吗?
  9. 状态机 复杂逻辑问题_状态管理中的逻辑
  10. 随想录(gcc生成的中间语言、汇编代码)
  11. visual studio code(vs code) 编译、运行、调试程序(调用g++)
  12. 在线CC攻击网站源码
  13. 【操作系统】—I/O设备的基本概念和分类
  14. 基于Kinect深度图像和SLAM二维地图创建
  15. 第三方支付机构是什么
  16. 苹果手机尺寸详细表及iPhoneX、iPhoneXS、iPhoneXR、iPhoneXSMax、iPhone 11、iPhone 11 Pro、iPhone 11 Pro Max、屏幕适配
  17. c语言编译产生随机数为什么,C语言 怎样产生随机数
  18. Python入门(2)
  19. 前端使用sockJs进行聊天通讯的功能
  20. 【人工智能】2028:AI创造了哪些工作?未来10年21个核心工作岗位 。

热门文章

  1. vcenter 6.7 (vcsa)部署指南
  2. opencv---颜色空间转化并实现物体跟踪
  3. 基于Azure Blob冷存储的数据压缩备份总结
  4. 【Mongodb】用户和认证 权限总结
  5. 带有帐号密码验证的apche服务器文件下载
  6. 开源 java CMS - FreeCMS2.2 系统配置
  7. Oracle索引扫描四大类的分析
  8. Blazor University (6)组件 — 组件事件
  9. .NET6下周发布真的香,可不少人却只会.NET Framework!
  10. 何时使用领域驱动设计