dotnet core 开发无缝兼容Http和Websocket协议的接口服务

在应用接口开发中往往要针对不同协义开发相应的代理服务,但对于Websocket和http这两种协议来说就有些不同,从实现上来看Websocket可以说是Http的升级子协议, 两者在协议处理上基本一致,具体可以在解释Body上有所不同。FastHttpApi在实现过程完全支持http协议升级成websocket协议,当制定一个基于http请求的接口时,其实已经是完全支持websocket协议;从而让使用者只编写一份代码即可同时接受两种协议处理。接下来还是以Northwind的数据来描述FastHttpApi制定相应服务开发。

接口制定

对于FastHttpApi定义一个可访问的Http接口是一件非常简单的事情,和定义一个逻辑方法没有多大的差异;以下是定义一个订单查询逻辑的http接口,返回Json格式的数据。

640?wx_fmt=png

以上代码定义了三个Http请求:

  1. /GetEmployeesName 获取雇员的ID和名称列表

  2. /GetCustomersName 获取客户的ID和名称列表

  3. /ListOrders 查询相应雇员和客户的订单信息 在浏览器上直接访问/GetEmployeesName的数据结果

 640?wx_fmt=png

FastHttpApi对接口响应有默认的Json格式返回,Code为HTTP返回的状态码,200为正常,如果不是200那会带上Error信息,Data则是具体响应的数据内容,Url则是对应请求的基础地址。

页面Ajax请求接口

既然通过浏览器访问没有问题,那接下来就可以通过Ajax进行数据请求了;以下是通过ajax调用/GetEmployeesName/GetCustomersName两个方法。

640?wx_fmt=png

请求数据后绑定到select控件上,这种是相当原始的设置模式了,相信现有的web前端组件已经不需要这么麻烦的工作了:)

订单查询

640?wx_fmt=png

对于FastHttpApi制定方法参数的在http主要有两种来源途径,一种是通过Querystring提供,而另一种则通过Post一个json内容来提供;对于组件来说只要没有添加[BodyParameter]标签的参数都由QueryString来提供(实际使用中有特别的需要则可以实现自己Parameter的属性标签来扩展)。这样一个订单查询的功能就开发完成了

 640?wx_fmt=png

WebSocket请求

由于服务端口和网站的端口是一致,所以构建websocket连接的时候并不要显式地指定地址,直接拿浏览当前的Host地址即可。

  websocket = new WebSocket("ws://" + window.location.host);websocket.onopen = function (evt) { onOpen(evt) };websocket.onclose = function (evt) { onClose(evt) };websocket.onmessage = function (evt) { onMessage(evt) };websocket.onerror = function (evt) { onError(evt) };

连接创建后就可以对服务进行请求,由于websocket默认发送的Text内容,为了能够方便调用需要制定一些数据格式规划,在这里我们首选也是Json.

640?wx_fmt=png

请求的数据内容主要包括urlparams,url是描述具体请求的Http地址;params则是描述对应参数名的参数。通过和ajax的查询代码来对比,两者没有多大的区别,前者是基于url请求而后者则通过描述一个json来处理。

API调用方式查看

FastHttpApi内部集成了一个API查询面页,通过这个页面可以查询当前服务下所有可访问的接口,并描述接口在ajax和websocket下的访问调用方式和相关数据格式。访问路径/_info/api.html

640?wx_fmt=png

总结

如果你想开发一个接口服务相同时支持ajax和websocket访问的话,那FastHttpApi会是不错的选择,因为它能提供方便,高效和安全的应用服务接口编写基础服务功能。 本文例子的项目代码:/samples/HttpApiServer.HttpAndWebsocketApi

相关文章:

  • dotnet core高吞吐Http api服务组件FastHttpApi

原文地址: https://www.cnblogs.com/smark/p/9712639.html


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

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos7 lldb 调试netcore应用的内存泄漏和死循环示例(dump文件调试)

写个demo来玩一玩linux平台下使用lldb加载sos来调试netcore应用。当然,在真实的产线环境中需要分析的数据和难度远远高于demo所示,所以demo的作用也仅仅只能起到介绍工具的作用。通常正常情况下,分析个几天才能得出一个结论的的结果都还是比较…

.NET微服务方案调查

.NET Core就是专门针对模块化的微服务架构而设计,调查下大家选择.NET微服务情况,如果你有微服务方面的需求可以找我哦,可加我微信geffzhang:相关文章:Service Fabric 与Ocelot 的集成Ocelot简易教程(二&…

中国开源年会 COSCon 2018 今起接受报名!

大会官网二维码名片:点击文末左下角阅读原文,直达报名链接写在大会前开源 20 年,我们遇到了什么问题?‍围绕开源的方式来开发软件项目,正在走向业界的主流。随着开源的崛起,相应的问题也来了:Re…

.Net Core应用框架Util介绍(四)

上篇介绍了Util Angular Demo的目录结构和运行机制,本文介绍Util封装Angular的基本手法及背后的动机。Angular应用由Ts和Html两部分构成,本文介绍第一部分。Angular Ts的封装Ts是Angular的代码部分,用于编写页面逻辑。依赖注入( Dependency I…

2020牛客暑期多校训练营(第四场)

2020牛客暑期多校训练营(第四场) 这场属实有点难受 文章目录A Ancient DistanceB Basic Gcd Problem题目代码:C Count New StringD Dividing StringsE EliminateF Finding the Order题意:题解:代码:G Geome…

《C# 程序员的自我修养》送书活动结果公布

截止到9月28日24:00 ,本次送书活动《C# 程序员的自我修养》共收到150多位同学参与回复。以下5位同学将获赠书籍一本:夏树、Damon、水墨清华、天天、kang以上同学请加小二微信领取赠书小二微信:geffzhang.NET社区新闻,深…

使用 dotTrace 分析 .NET Core 代码问题

0.背景在项目开发之中,前期可能主要以保证任务完成为主,对于性能优化主要在于开发完成之后再来进行。可能在测试的时候发现部分接口的代码执行时间过长,但是又毫无头绪,这个时候你就需要性能分析工具来协助你排查问题了。常规性能…

【每日一题】7月17日题目精讲—BOWL 碗的叠放

【每日一题】7月17日题目精讲—BOWL 碗的叠放 时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 262144K,其他语言524288K 64bit IO Format: %lld题目描述 小H有n个碗需要放进橱柜,她希望将他们叠起来放置。你知道每个碗都…

基于Ocelot的gRpcHttp网关

什么是gRpcHttp网关通俗的讲就是将gRpc提供的服务以rest api的形式提供出去,不需要再单独的写一个webapi去做这件事。gRpcHttp网关好处减少不必要代码,减少中间层提高通讯效率。以前可能是这样用了gRpc网关后是这样gRpcHttp网关提供哪些功能可以直接加载…

CF917D-Stranger Trees【矩阵树定理,高斯消元】

正题 题目链接:https://www.luogu.com.cn/problem/CF917D 题目大意 给出nnn个点的一棵树,对于每个kkk求有多少个nnn个点的树满足与给出的树恰好有kkk条边重合。 解题思路 矩阵树有一个统计所有树边权和的和用法,就是把变量变成一个形如wx1wx1wx1的多项…

COSCon'18 面向全宇宙招募志愿者啦!

2018 中国开源年会(COSCon18-China Open Source Conference 2018) 志愿者招募工作今日正式启动!我们诚挚地欢迎开源社区的朋友们及高校的同学们加入志愿工作者团队,与国内外众多开源项目基金会、公司、大神等齐聚一堂,共襄盛举。招…

讲重点,看趋势——Microsoft Ignite 2018的回顾和展望

一年一度的微软技术大会——Microsoft Ignite 2018上周在奥兰多召开,目前已经落下帷幕。我没有去现场,但据说这次的盛况空前,创下微软之最。确实,这些年来,微软内部非常重视 Iginte,上至最高管理层&#xf…

算法工程师的危机

本文为沙漠之鹰第68篇原创文章9月20号讯飞AI同传语音造假的新闻刷爆科技圈,科大讯飞股价应声下跌3.89%(不是65.3%,标题党文章害死人)。 吃瓜群众纷纷感慨,有多少人工,就有多少智能。小编偷换概念玩的溜AI概…

Cover the Tree(2020多校第二场C)

Cover the Tree 文章目录题意:题解:代码题意: 一个无向树,选择最少数量的链子,能将树上所有边覆盖,答案不唯一 (1≤n≤2105) 链子就是两点之间的边 看看样例 输入 5 1 2 1 3 2 4 2 5输出 2 2…

[模板]多项式全家桶小记(求逆,开根,ln,exp)

前言 这里的全家桶目前只包括了ln,exp,sqrtln,exp,sqrtln,exp,sqrt。还有一些类似于带余数模,快速幂之类用的比较少的有时间再更,NTTNTTNTT这种前置知识这里不多说。 还有一些基本的导数和微积分内容要了解,建议不懂的可以先去翻翻高二数学…

牛客网【每日一题】7月21日题目精讲—区间权值

来源:牛客网: 区间权值 时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 1048576K,其他语言2097152K 64bit IO Format: %lld题目描述 输入描述: 第一行一个正整数 n 第二行 n 个正整数 a1…an 第三行 n 个正…

C# 函数式编程:LINQ

一直以来,我以为 LINQ 是专门用来对不同数据源进行查询的工具,直到我看了这篇十多年前的文章,才发现 LINQ 的功能远不止 Query。这篇文章的内容比较高级,主要写了用 C# 3.0 推出的 LINQ 语法实现了一套“解析器组合子(…

2020牛客暑期多校训练营(第六场)

2020牛客暑期多校训练营(第六场) 额,睡了一下午,直接错过了比赛。。。 文章目录A African Sort题意:题解:代码:B Binary VectorC Combination of Physics and Maths题意:题解&#x…

P4001-[ICPC-Beijing 2006]狼抓兔子【对偶图】

正题 题目链接:https://www.luogu.com.cn/problem/P4001 题目大意 给出一个类似于 的网格图,求起点到终点的最小割。 解题思路 最小割直接跑网络流,然后发现dinicdinicdinic都过不了。(好像加点玄学优化就能过) 然后上点科技…

私有云方案——利用阿里云云解析实现DDNS

各位都是程序员,工作中是不是遇到个类似情况。在家里研究的一些开源代码或写的一些demo或试验代码,在工作中正好需要参考一下,但是在家里的电脑上。虽然这些都可以用云盘/网盘之类的来完成,源代码也可以托管到源码平台。但是这些都…