AServer - 基于Asp.net core Kestrel的超迷你http服务器
AServer是基于ASP.NET Core Kestrel封裝的一個(gè)超迷你http服務(wù)器。它可以集成進(jìn)你的Core程序里,用來(lái)快速的響應(yīng)Http請(qǐng)求,而不需要集成整個(gè)ASP.NET Core MVC 框架。
一:什么是ASever?
AServer就像它的名字一樣,Just a server,它的功能非常簡(jiǎn)單,它唯一的功能就是用來(lái)對(duì)Http請(qǐng)求做出響應(yīng)。以前我們開(kāi)發(fā)一個(gè).NET程序,比如控制臺(tái)程序,Windows服務(wù)等,如果需要對(duì)外提供接口,我們通常會(huì)在程序里集成WCF,使用WCF對(duì)外提供RPC接口。但是現(xiàn)在是.NET Core的時(shí)代,我們已經(jīng)沒(méi)有辦法選擇WCF了。而且這些需求往往很簡(jiǎn)單,只是想要對(duì)外提供幾個(gè)接口,查詢一些數(shù)據(jù),或者觸發(fā)一些功能,如果我們集成整個(gè)ASP.NET Core MVC框架又覺(jué)得是殺雞用牛刀的感覺(jué)。這個(gè)時(shí)候你或許可以選擇AServer。AServer很簡(jiǎn)單,它僅僅是一個(gè)dll,這或許正是你想要的。
github地址:https://github.com/kklldog/AServer?歡迎star。
二:使用AServer
如何使用AServer呢,非常簡(jiǎn)單,讓我們看幾個(gè)示例代碼就明白了。假設(shè)我們現(xiàn)在有個(gè)跑定時(shí)任務(wù)的控制臺(tái)程序,這個(gè)程序需要對(duì)外提供3個(gè)Http接口:
1.查詢所有任務(wù)
2.新增一個(gè)任務(wù)
3.刪除一個(gè)任務(wù)
下面演示如何使用AServer來(lái)實(shí)現(xiàn)這3個(gè)接口。
1.新建一個(gè)Core的控制臺(tái)程序
?
2.從nuget安裝AServer
3.實(shí)例化一個(gè)Server
直接new一個(gè)Server對(duì)象,它默認(rèn)會(huì)監(jiān)聽(tīng)本地5000端口。
static void Main(string[] args){var server ?= new Agile.AServer.Server();}4.實(shí)現(xiàn)查詢所有任務(wù)接口
該接口的請(qǐng)求地址為/api/tasks,請(qǐng)求方法為GET,返回任務(wù)列表數(shù)組。
5.實(shí)現(xiàn)新增任務(wù)接口
該接口的請(qǐng)求地址為/api/tasks,請(qǐng)求方法為POST,如果新增成功則返回文本"ok"。
6.實(shí)現(xiàn)刪除任務(wù)接口
該接口的請(qǐng)求地址為/api/tasks/:taskId,請(qǐng)求方法為DELETE,如果刪除成功則返回文本"ok"。
7.啟動(dòng)服務(wù)器
調(diào)用Server.Run()方法啟動(dòng)服務(wù)器。
8.測(cè)試
至此,演示代碼編寫(xiě)完了。運(yùn)行這個(gè)控制臺(tái)程序,然后用postman來(lái)測(cè)試下這3個(gè)接口,是否能響應(yīng)我們預(yù)期的結(jié)果。
測(cè)試查詢?nèi)蝿?wù)接口
測(cè)試新增任務(wù)接口
測(cè)試刪除任務(wù)接口
可以看到我們對(duì)這3個(gè)接口的測(cè)試都返回了預(yù)期的值,說(shuō)明AServer正確的響應(yīng)了我們的請(qǐng)求。
9.通過(guò)繼承HttpHandlerController實(shí)現(xiàn)接口
另外,還可以通過(guò)繼承HttpHandlerController來(lái)處理http請(qǐng)求。該方法更接近ASP.NET MVC慣用的方法。編寫(xiě)一個(gè)class繼承自HttpHandlerController,對(duì)里面的方法添加[HttpHandler] attribute來(lái)指定請(qǐng)求地址跟方法。需要注意的是里面的方法我們約定了簽名:Task (Reqeust,Response)。
下面的代碼演示了如果通過(guò)繼承HttpHandlerController來(lái)實(shí)現(xiàn)一系列汽車信息管理的api接口:
10.Request/Response
通過(guò)上面的演示代碼,不難發(fā)現(xiàn),AServer對(duì)Http請(qǐng)求的處理都封裝在HttpHandler對(duì)象中。HttpHandler類有3個(gè)屬性,Method,Path,Handler。Method表示Http請(qǐng)求的方式,Path表示請(qǐng)求的路徑,Handler是一個(gè)Func,業(yè)務(wù)邏輯就寫(xiě)在這里。Handler的這個(gè)Func的方法簽名為T(mén)ask (Request,Response)。
其中Request封裝了本次Http請(qǐng)求的請(qǐng)求部分的參數(shù),它會(huì)解析Http請(qǐng)求,把headers,queryStrings,params解析成dynamic對(duì)象,所以調(diào)用參數(shù)的時(shí)候跟寫(xiě)JavaScript類似,如:
var name = req.Params.name; var id = req.Query.id; var contentType = req.Header.contentType;Response則封裝了幾個(gè)Write方法,用來(lái)寫(xiě)響應(yīng)的內(nèi)容,狀態(tài)碼,Header等內(nèi)容,如:
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'}");?
三:總結(jié)
對(duì)于AServer的介紹也差不多了。希望對(duì)同學(xué)們有幫助。AServer雖然功能很簡(jiǎn)單,就是對(duì)Http請(qǐng)求做出響應(yīng)。但是我也可以說(shuō)AServer的功能很強(qiáng)大,因?yàn)樗軐?duì)Http請(qǐng)求做出響應(yīng)。因?yàn)閺腍ttp的本質(zhì)上來(lái)說(shuō),AServer幾乎可以實(shí)現(xiàn)所有基于Http的功能。我們可以用它來(lái)實(shí)現(xiàn)restful api,可以用來(lái)實(shí)現(xiàn)各種管理系統(tǒng),可以用來(lái)實(shí)現(xiàn)cms系統(tǒng)。。。
不管使用ASP.NET MVC或者JSP或者node express等web框架開(kāi)發(fā)bs/web系統(tǒng)的時(shí)候其實(shí)套路都是一樣的,概況一下就這么幾步:
1.攔截請(qǐng)求(路由)
2.解析請(qǐng)求攜帶的參數(shù)(url,headers,querystrings,body等)
3.根據(jù)參數(shù)處理業(yè)務(wù)(查數(shù)據(jù),持久數(shù)據(jù)等)
4.根據(jù)業(yè)務(wù)處理結(jié)果做出響應(yīng)(html,json,xml等)
我們只要了解這個(gè)套路,不管用什么技術(shù),什么框架,其實(shí)都是一樣的,只要查下api,弄明白怎么獲取http請(qǐng)求的參數(shù),怎么做出響應(yīng)。AServer也實(shí)現(xiàn)了這個(gè)套路。如果有心的話,對(duì)AServer實(shí)現(xiàn)過(guò)濾器,參數(shù)綁定,視圖引擎等功能,那基本上就是一個(gè)簡(jiǎn)易的mvc框架了。當(dāng)然如果你的業(yè)務(wù)復(fù)雜,請(qǐng)選用ASP.NET Core MVC,它功能強(qiáng)大,性能強(qiáng)悍;如果你只是需要實(shí)現(xiàn)幾個(gè)簡(jiǎn)單的Http接口,可以考慮AServer來(lái)實(shí)現(xiàn)。
原文地址:?https://www.cnblogs.com/kklldog/p/agileaerver.html
.NET社區(qū)新聞,深度好文,歡迎訪問(wèn)公眾號(hào)文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的AServer - 基于Asp.net core Kestrel的超迷你http服务器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ASP.NET Core 集成测试中结合
- 下一篇: Feature Flag 功能发布控制