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使用入门的更多相关文章

  1. 基于flask的轻量级webapi开发入门-从搭建到部署

    基于flask的轻量级webapi开发入门-从搭建到部署 注:本文的代码开发工作均是在python3.7环境下完成的. 关键词:python flask tornado webapi 在python虚 ...

  2. BeetleX之webapi自定义响应内容

    输出内容多样性在webapi服务中比较普遍的,有的情况使用json,xml,图片和二进制流下载等等:为了适应用不同情况的需要,组件支持自定义内容输出.接下来的主要描述组件在webapi如何定义各种内容 ...

  3. 实例快速上手 -ASP.NET 4.5新特性WebAPI从入门到精通

    在新出的MVC4中,增加了WebAPI,用于提供REST风格的WebService,新生成的WebAPI项目和典型的MVC项目一样,包含主要的Models.Views.Controllers等文件夹和 ...

  4. ASP.NET 4.5新特性WebAPI从入门到精通

    在新出的MVC4中,增加了WebAPI,用于提供REST风格的WebService,新生成的WebAPI项目和典型的MVC项目一样,包含主要的Models.Views.Controllers等文件夹和 ...

  5. ASP.NET WebAPI从入门

    在新出的MVC4中,增加了WebAPI,用于提供REST风格的WebService,新生成的WebAPI项目和典型的MVC项目一样,包含主要的Models.Views.Controllers等文件夹和 ...

  6. webapi从入门到放弃(一)OWIN 自寄宿模式

     1.创建web空项目 2.创建完如图 3.安装如下程序包Microsoft.AspNet.WebApi.Core (5.2.4)Microsoft.Owin.Host.SystemWeb (4.0. ...

  7. .Net Core WebApi(1)— 入门

    主要讲述利用EF Core的CodeFirst迁移数据库,简单接口增删改查的使用,利用Swagger生成接口文档. 1.新建项目 创建DbContext 和实体模型

  8. 手把手教你AspNetCore WebApi:入门

    需求 前几天,马老板给小明和小红一个"待办事项"网站,小明负责后端,小红负责前端,并要求网站可以同时在 Windows.和 Linux 上运行. 小明整理了一下"待办事项 ...

  9. asp.net core WebApi 快速入门

    参考:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-web-api?view=aspnetcore-2.1 官网的例子 直接 ...

随机推荐

  1. java初探(1)之缓存技术

    页面缓存的原理: 普通要想生成一个页面,需要该页面在springboot的templates目录下,然后通过springboot的内部渲染,视图解析器将页面渲染回客户端,这中间会花费很长的时间. 但如 ...

  2. Selenium文件上传问题

     

  3. UEFI、BIOS、GPT、MBR等概念的辨析

    (本文转移自本人的旧博客) 从各个地方包括知乎,Wiki,CSDN搜索到的一些整理,这些概念极易混淆. 先说互相的关系 BIOS和UEFI是两种固件接口标准 MBR和GPT是两种分区表 Legacy模 ...

  4. 20190923-11Linux crond 系统定时任务 000 019

    crond 服务管理 1.重新启动crond服务 [root@hadoop101 ~]# service crond restart centOS7是 systemctl restart crond ...

  5. leetcode刷题-79单词搜索

    题目 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格.同一个单元格内的字母不允许被重复 ...

  6. 2018.12.30【NOIP提高组】模拟赛C组总结

    2018.12.30[NOIP提高组]模拟赛C组总结 今天成功回归开始做比赛 感觉十分良(zhōng)好(chà). 统计数字(count.pas/c/cpp) 字符串的展开(expand.pas/c ...

  7. [CF571B]Minimization(贪心+DP)

    题目链接 http://codeforces.com/problemset/problem/571/B 题意 给数组,得到公式最小值. 题解 由题分成的子数组只有两种长度,每种长度的数组数量也是固定的 ...

  8. JSON数据处理框架Jackson精解第一篇-序列化与反序列化核心用法

    Jackson是Spring Boot默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的,没有这种限制.它提供了很 ...

  9. 《Java核心技术卷一》之 泛型

    一.引言 在学习集合的时候我们会发现一个问题,将一个对象丢到集合中后,集合并不记住对象的类型,统统都当做Object处理,这样我们取出来再使用时就得强制转换类型,导致代码臃肿,而且加入集合时都是以Ob ...

  10. @Autowried入门和源码分析

    话不多说直接上代码: 声明一个接口userDao: package ioc.hello; public interface UserDao { public void test(); } 2个实现类: ...