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 官网的例子 直接 ...
随机推荐
- Laptop(线段树+离散化)
链接:https://ac.nowcoder.com/acm/contest/16/A来源:牛客网 题目描述 FST是一名可怜的小朋友,他很强,但是经常fst,所以rating一直低迷. 但是重点在于 ...
- PHP弱类型hash比较缺陷
成因分析: == 在进行比较的时候,会先将两边的变量类型转化成相同的,再进行比较 0e在比较的时候会将其视作为科学计数法,所以无论0e后面是什么,0的多少次方还是0. 因此CTF比赛中需要用到弱类型H ...
- 剑指offer 07 & LeetCode 105 重建二叉树
题目 题目链接:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/ 初步题解 先放代码: /** * Definition for ...
- 使用Built-in formatting来创建log字符串
在一次哦测试中,sonar-qube总是报Use the built-in formatting to contruct this argument, 在网上查了一下,原来它是推荐这样做: log.i ...
- 如何在不使用OleDbCommandBuilder情况下使用OleDbDataAdapter更新Access数据库记录
我在博客园的博问和微软论坛都曾经请教了这个问题(问题链接),可能我的问题太简单,并没有获得太多解答. 到今天为止,我自己通过查找和摸索,基本把这个问题解决了,还是记录下来,供其他朋友参考. 第一次解决 ...
- JZOJ1496 页
Description 战神阿瑞斯听说2008年在中华大地上,将举行一届规模盛大的奥林匹克运动会,心中顿觉异常兴奋,他想让天马在广阔的天空上,举行一场精彩的天马队列变换表演.首先,战神安排n头高度不同 ...
- 一篇文章教你快速上手接口管理工具swagger
一.关于swagger 1.什么是swagger? swagger是spring fox的一套产品,可以作为后端开发者测试接口的工具,也可以作为前端取数据的接口文档. 2.为什么使用? 相比于传统的接 ...
- django之models报错
django 执行python manage.py makemigrations报错:TypeError: __init__() missing 1 required positional argum ...
- Envoy 代理中的请求的生命周期
Envoy 代理中的请求的生命周期 翻译自Envoy官方文档. 目录 Envoy 代理中的请求的生命周期 术语 网络拓扑 配置 高层架构 请求流 总览 1.Listener TCP连接的接收 2.监听 ...
- iOS多线程之超实用理论+demo演示(可下载)
目录 背景简介 GCD.OperationQueue 对比 核心理念 区别 GCD 队列 串行队列(Serial Queues) 并发队列(Concurrent Queues) 串行.并发队列对比图 ...