BeetleX之webapi使用入门
BeetleX是TCP通讯应用组件,在它之上可以扩展任何基于TCP的应用通讯功能。FastHttpApi是组件扩展的一个Http/Https/Websocket服务组件,它提供的功能丰富,包括功能有:静态文件,动态数据控制器和Websocket等相关功能支持;实际在上还在FastHttpApi基础扩展了Http/Https/Websocket网关应用组件(更直观上来说https://beetlex.io网站上的所有服务内容都是基于BeetleX构建)。
在现有前后分离的Web开发应用模式中,编写Webapi作为数据服务通讯交互是比较普遍的。接下来介绍如何使用组件快速地构建一个Webapi服务。
控制器定义
组件在定义Webapi控制器并没有什么特别的要求,只需要根据实际应用情况定义类和相关方法即可。
[Controller]
public class Webapi
{
public object Hello(string name)
{
return $"hello {name}";
}
}
以上定义一个对象并带有Hello方法,只要在类上标记[Controller]即可被组件加载成Webapi服务访问路径为/Hello ;方法可以通过post/get进行访问,即使是传统的form post或json post都同时兼容,无须在参数上添加任何描述型的标签(这也是组件使用方便性的地方)。
启动服务
当Webapi控制器编写完成后就可以写服务启动它。
class Program
{
static void Main(string[] args)
{
HttpApiServer server = new HttpApiServer();
server.Register(typeof(Webapi).Assembly);
server.Options.Port = 80;
server.Options.LogLevel = EventArgs.LogType.Info;
server.Options.LogToConsole = true;
server.Options.SSL = true;
server.Options.CertificateFile = "ssl.pfx";
server.Options.CertificatePassword = "123456";
server.Open();
System.Threading.Thread.Sleep(-1);
}
}
只需要创建一个HttpApiServer对象,通过Register方法把存在控制器的程序集注册即可,如果有多个程序集则可以传入多个。接下来的工作就是配置端口和SSL信息;最后通过Open方法启动对应的Http/Https服务。

通过以上日志可以查看服务启动情况。
服务访问
服务启动后就可以通过浏览器对它进行访问

组件为了更好配合自己有的js组件库调用,所以默认返回一个针对性的结构体。在实际应用中可以需要制定自己的返回结构,这个时候可以制定自己的IResult返回对象
public object Hello(string name)
{
return new JsonResult($"hello {name}");
}
//或者
[DefaultJsonResultFilter]
public object Hello(string name)
{
return $"hello {name}";
}
以上两种情况是定义一个默认返回的Json结构体,不附加任何其他信息成员。

实际应用中也可以针对自己的需求来制定不同的IResult.
请求上下文
在控制器中有时间不仅仅获取请求数据,有时候还需要获取和设置请求头和Cookie等;这个时候就需要访问组针对Http信息关联的详细信息。组件提供了一个IHttpContext的接口来访问相关信息,这个对象只要参数中定义即可以由组件自动提供。
public object GetContext(IHttpContext context)
{
return context.Request.Header.Copy();
}
可以访问GetContext方法获取当前请求的头信息

配置文件
有很多时候希望通过文件配置来更改监听的端口和对应的SSL配置信息等;组件默认会读取当前运行目录下的HttpConfig.json配置文件,如果目录下没有这个文件则是组件内部默认配置。
{
"HttpConfig": {
"SameSite": null,
"ServerTag": "beetlex.io",
"OutputServerTag": true,
"IPRpsLimit": 0,
"IPRpsLimitDisableTime": 1800000,
"MaxWaitQueue": 1000,
"BufferPoolSize": 10,
"BufferPoolGroups": 4,
"IOQueues": 1,
"SyncAccept": true,
"ManageApiEnabled": true,
"Statistical": true,
"IOQueueEnabled": false,
"CacheLogMaxSize": 1000,
"CacheLogFilter": null,
"MaxrpsSettings": [],
"Settings": [],
"AccessKey": null,
"AutoGzip": false,
"StaticResurceCacheTime": 0,
"BufferPoolMaxMemory": 500,
"SessionTimeOut": 600,
"UseIPv6": true,
"Virtuals": [],
"PacketCombined": 0,
"FileManager": false,
"FileManagerPath": null,
"LogToConsole": true,
"NotLoadFolder": "\\Files;\\Images;\\Data",
"CacheFiles": "html;htm;js;css",
"CacheFileSize": 500,
"LogLevel": 16,
"WebSocketMaxRPS": 30,
"BufferSize": 8192,
"NoGzipFiles": "jpg;jpeg;png;gif;png;ico;zip;rar;bmp",
"MaxConnections": 2000,
"Manager": null,
"ManagerPWD": null,
"WriteLog": false,
"Host": "",
"Debug": false,
"FixedConverter": false,
"AgentRewrite": true,
"RewriteIgnoreCase": true,
"RewriteCachedSize": 500000,
"Port": 80,
"SSL": true,
"SSLPort": 443,
"CertificateFile": "beetlex.pfx",
"CertificatePassword": "******",
"MaxBodyLength": 2097152,
"OutputStackTrace": true,
"StaticResurceType": "woff2;js;rar;xml;woff;css;jpg;gif;map;zip;jpeg;svg;txt;ico;ttf;htm;png;html",
"DefaultPage": "index.html;index.htm",
"StaticResourcePath": null
}
}
由于组件涉及到很多方面的配置,如:url重写,线程队列,缓冲区和静态资源支持等等;一般情况下只需要针对以下几项配置过行调整即可。
{
"HttpConfig": {
"SameSite": null,
"ServerTag": "beetlex.io","Port": 80,
"SSL": true,
"SSLPort": 443,
"CertificateFile": "beetlex.pfx",
"CertificatePassword": "******",
"MaxBodyLength": 2097152,
"OutputStackTrace": true,
"StaticResurceType": "woff2;js;rar;xml;woff;css;jpg;gif;map;zip;jpeg;svg;txt;ico;ttf;htm;png;html",
"DefaultPage": "index.html;index.htm"
}
}
下载示例
链接:https://pan.baidu.com/s/10Ct0jJQfKRnc-jXI4JoGig
提取码:xywc
BeetleX之webapi使用入门的更多相关文章
- 基于flask的轻量级webapi开发入门-从搭建到部署
基于flask的轻量级webapi开发入门-从搭建到部署 注:本文的代码开发工作均是在python3.7环境下完成的. 关键词:python flask tornado webapi 在python虚 ...
- BeetleX之webapi自定义响应内容
输出内容多样性在webapi服务中比较普遍的,有的情况使用json,xml,图片和二进制流下载等等:为了适应用不同情况的需要,组件支持自定义内容输出.接下来的主要描述组件在webapi如何定义各种内容 ...
- 实例快速上手 -ASP.NET 4.5新特性WebAPI从入门到精通
在新出的MVC4中,增加了WebAPI,用于提供REST风格的WebService,新生成的WebAPI项目和典型的MVC项目一样,包含主要的Models.Views.Controllers等文件夹和 ...
- ASP.NET 4.5新特性WebAPI从入门到精通
在新出的MVC4中,增加了WebAPI,用于提供REST风格的WebService,新生成的WebAPI项目和典型的MVC项目一样,包含主要的Models.Views.Controllers等文件夹和 ...
- ASP.NET WebAPI从入门
在新出的MVC4中,增加了WebAPI,用于提供REST风格的WebService,新生成的WebAPI项目和典型的MVC项目一样,包含主要的Models.Views.Controllers等文件夹和 ...
- webapi从入门到放弃(一)OWIN 自寄宿模式
1.创建web空项目 2.创建完如图 3.安装如下程序包Microsoft.AspNet.WebApi.Core (5.2.4)Microsoft.Owin.Host.SystemWeb (4.0. ...
- .Net Core WebApi(1)— 入门
主要讲述利用EF Core的CodeFirst迁移数据库,简单接口增删改查的使用,利用Swagger生成接口文档. 1.新建项目 创建DbContext 和实体模型
- 手把手教你AspNetCore WebApi:入门
需求 前几天,马老板给小明和小红一个"待办事项"网站,小明负责后端,小红负责前端,并要求网站可以同时在 Windows.和 Linux 上运行. 小明整理了一下"待办事项 ...
- asp.net core WebApi 快速入门
参考:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-web-api?view=aspnetcore-2.1 官网的例子 直接 ...
随机推荐
- unity2D物理引擎之-Rigidbody 2D
虽然Rigidbody 2D大致上可以看成是Rigidbody的2D化,大部分功能也是一致的,但是还是有一些细节问题. 一些事项: 1.任何添加到同一个 GameObject身上或者其子物体身上的 2 ...
- 【转】LeakCanary
LeakCanary:检测所有的内存泄漏 http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0509/2854.html 原文: L ...
- 出现jupyter notebook password or token提示需要token的处理方法
很多朋友不知道下面的情况怎么处理,我给大家介绍一个方法! 出现这种情况很简单用下面这个地址就能进去了 (注意是你自己的 不是我这个)
- 7.SwrContext音频重采样使用
头文件位于#include <libswresample/swresample.h> SwrContext常用函数如下所示 SwrContext *swr_alloc(void); / ...
- PHP实现Restful风格的API(转)
Restful是一种设计风格而不是标准,比如一个接口原本是这样的: http://www1.qixoo.com/user/view/id/1表示获取id为1的用户信息,如果使用Restful风格,可以 ...
- Java成神之路:第二帖---- 数据结构与算法之稀疏数组
数据结构与算法--稀疏数组 转换方法 记录数组有几行几列,有多少个不同的值 把不同的值的元素的行列,记录在一个小规模的数组中,以此来缩小数组的规模 如图: 二维数组转稀疏数组 对原始的二维数组进行遍历 ...
- 一次MySQL索引失效引发的思考
最近公司做了一个千万数量级的项目,由于要求性能比较高,每一个相对慢的查询都需要优化,项目经理是一个比较有经验的开发人员,基本上遇到问题都会先自行处理:或自己分析原因或网络寻求帮助. 但是项目平稳运行一 ...
- 对JavaScript的复习(一)
*javascript基础复习 1.function对象 创建 var 方法名=Function(形式参数列表){ 方法体 } 调用 方法名(实际参数列表) 2.Array对象 创建 * var ar ...
- 小白的springboot之路(十八)、i18n多语言支持(后端篇)
0-前言 在有些系统中,比如网站,往往需要支持多国语言,英文版中文版什么的,这个其实也不难: 今天我们就来介绍spring boot中用i18n在后端支持多语言: 当然,也可以直接在前端用i18n直接 ...
- vue中axios的使用
新开了一个vue项目,从头到尾都是一个人做的,所以就自己配置了一个axios.js文件 第一种方法.使用axios 需要下载安装 npm install axios,下载完成之后 在main.js ...