Web服务器HttpServer(嵌入式设备)

HttpServer是一个轻量级Web服务器,用于在嵌入式设备以及客户端环境中提供简单Web服务。

HttpServer支持路由映射到匿名委托、WebApi接口、静态文件,以及具有多个接口的控制器类。从简单到复杂,控制权交给开发者。

源码:https://github.com/NewLifeX/X/blob/master/NewLife.Core/Http/HttpServer.cs

Nuget:NewLife.Core

Get Started

准备好vs2022,新建.NET6.0控制台项目

从nuget引用 NewLife.Core 包,找到包后点击安装,将会安装最新版

打开源码文件 Program.cs ,输入以下例程,该例程将会监听8080端口提供Web服务,并打开所有日志,映射了4个不同的路由。

using NewLife.Http;
using NewLife.Log;
using NewLife.Remoting;XTrace.UseConsole();var server = new HttpServer
{Port = 8080,Log = XTrace.Log,SessionLog = XTrace.Log
};
server.Map("/", () => "<h1>Hello NewLife!</h1></br> " + DateTime.Now.ToFullString() + "</br><img src=\"logos/leaf.png\" />");
server.Map("/user", (String act, Int32 uid) => new { code = 0, data = $"User.{act}({uid}) success!" });
server.MapStaticFiles("/logos", "images/");
server.MapController<ApiController>("/api");
server.Start();Console.ReadLine();

点击绿色三角箭头启动调试,或者按F5快捷键启动

vs2022将会自动编译源码并启动应用,弹出控制台窗口

控制台日志显示,网络应用程序已经开始监听8080端口,分别在IPv4和IPv6上同时监听。

通过浏览器访问 http://localhost:8080/ ,可以得到以下页面。

这是第一个路由映射的HTML页面。(图片文件没有放到相应目录下,所以没显示)

普通Html

HttpServer支持路由映射到一个返回html字符串的匿名方法

server.Map("/", () => "<h1>Hello NewLife!</h1></br> " + DateTime.Now.ToFullString() + "</br><img src=\"logos/leaf.png\" />");

路由路径为/,也就是根目录。这个匿名函数很简单,没有参数(也可以有参数),返回字符串。服务端就认为返回的是html文本。

如果返回类型是Byte[]或者Stream等二进制数据,则使用 application/octet-stream 类型。

如果处理函数内部抛出异常,则服务端将向浏览器返回500错误。

Api接口

HttpServer支持路由到WebApi接口,支持从url截取参数,支持POST自定义Json格式参数。

server.Map("/user", (String act, Int32 uid) => new { code = 0, data = $"User.{act}({uid}) success!" });

访问地址 http://localhost:8080/user?act=edit&uid=1234 得到

路由路径是/user。该接口返回一个对象,HttpServer将进行json序列化后返回。

静态文件

HttpServer支持路由到静态文件,可通过http访问指定目录下所有静态文件。

server.MapStaticFiles("/logos", "images/");

路由路径是/logos,指向当前目录的images子目录下的文件。

例如前面html中访问 /logos/leaf.png ,实际上指向 images/leaf.png ,需要在 images 子目录下放置 leaf.png 文件。从 http://x.newlifex.com/leaf.png 下载图片,放到images目录下,当然也可以用自己的图片。选中leaf.png文件,下方属性窗的复制到输出目录,选择“如果较新则复制”。

按F5再次跑起来项目,访问 http://localhost:8080/ 。

从日志可以看到,请求根目录/后,html里面img再次请求 /logos/leaf.png 图片。

HttpServer仅支持常用文件类型的MineType。

注意:静态文件处理器实现比较简单,可以下载dll和config等任意文件,但路径上做了限制,禁止跳出本地目录。

接口控制器

HttpServer支持映射到控制器类,内部所有公开实例方法作为下级路由。

server.MapController<ApiController>("/api");

路由路径/api映射控制器ApiController下所有公开接口。该类下共有 All/Info/Info2 几个接口。

访问路径 http://localhost:8080/api/info 可以看到:

本质上就是映射 /api/info 到 ApiController 内部的 Info 方法。

专用处理器IHttpHandler

HttpServer 对上述功能的支持,本质上就是把路由映射到 IHttpHandler 实现。因为完全可以通过自定义 IHttpHandler 实现来达到完全自定义Http处理的效果。

IHttpHandler 接口只有一个成员方法 ProcessRequest,传入 IHttpContext 上下文。上下文中有Request请求和Response响应。

namespace NewLife.Http
{//// 摘要://     Http处理器public interface IHttpHandler{//// 摘要://     处理请求//// 参数://   context:void ProcessRequest(IHttpContext context);}
}

编写一下例程:

class MyHttpHandler : IHttpHandler
{public void ProcessRequest(IHttpContext context){var name = context.Parameters["name"];var html = $"<h2>你好,<span color=\"red\">{name}</span></h2>";context.Response.SetResult(html);}
}

context.Parameters中有解析好的Url参数,Response.SetResult设置响应数据和MineType类型。

然后在Programe.cs中增加映射

server.Map("/my", new MyHttpHandler());

按F5启动,访问地址 http://localhost:8080/my?name=Stone 。

树莓派跑起来

部署到树莓派(这里不深入如何安装.NET6.0)

然后 curl 跑起来

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

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

相关文章

mysql同时查两张表数据库表_如何同时查询两个数据库表?

展开全部 sql多表关联查询跟条件查询大同小异,主要是要知道表与表之前的关系很重e69da5e6ba9062616964757a686964616f31333431353238要; 举例说明:(某数据库中有3张表分别为:userinfo,dep,sex) userinfo(用户信息表)表中有三个字段分别为:user_di(用户编号),user_name(用…

200万年薪,招不到清华姚班毕业生,能上姚班的都是什么人?

全世界只有3.14 % 的人关注了爆炸吧知识清华姚班可能很多人都没有听说过&#xff0c;不是我们孤陋寡闻&#xff0c;而是姚班确实是不一般的存在。即便是在清华&#xff0c;姚班的学霸也是可以碾压其他学霸的。在清华有一句话&#xff0c;半国英才聚清华&#xff0c;清华半英在姚…

分布式拒绝服务攻击(DDoS)原理及防范

转自:http://www.cnblogs.com/rootq/archive/2009/11/06/1597215.html http://www.ibm.com/developerworks/cn/security/se-ddos/ 2002 年 6 月 01 日 分布式拒绝服务攻击&#xff08;DDoS&#xff09;是目前黑客经常采用而难以防范的攻击手段。本文从概念开始详细介绍了这种攻…

Blazor 应用如何使用 Azure Active Directory 认证登录

点击上方蓝字 / 关注“汪宇杰博客”原文&#xff1a;Azure Tips and Tricks翻译&#xff1a;汪宇杰使用 Azure Active Directory 保护您的应用程序您可以使用 Azure Active Directory (AAD) 让用户进行身份验证并授权使用您的应用。AAD 提供了一种智能身份即服务来保护您的应用…

python notebook右侧网页_《Python web开发》笔记 一:网页开发基础

网页基础知识网页的构成网页由html、css和Javascript构成&#xff0c;html是框架&#xff0c;CSS是样式和装饰&#xff0c;JS则是各项功能实现。我们把网页的组成类比成一栋房子&#xff0c;Html相当于房子的结构&#xff0c;CSS相当于房子的装修装饰&#xff0c;JavaScript相当…

推荐几个超有趣的公众号

全世界只有3.14 % 的人关注了爆炸吧知识想要和别人有聊不完的话题&#xff1f;当然是多读书多看新闻了解新鲜有趣的事物啦如果你没有时间去阅读那么关注以下公号将会让你收获更多信息~长按下方二维码选择“识别图中二维码”订阅疯狂历史ID&#xff1a;fkhistory▼ 简介&#xf…

省钱之道--图解域域树域林根域的含义

如图&#xff1a;contoso这家公司的IT环境中有很多类型的IT资源&#xff0c;而目前这些IT资源都处于一个分散管理的状态中&#xff0c;这样无形中增加了contoso这家公司的管理成本&#xff0c;而且管理制度没有办法落实到实际的生产环境中去。那么&#xff0c;如何解决这个问题…

动态表单实现客户端二次过滤及字段汇总统计

最终效果动态表单 1、表格分录首行出现客户端二次过滤行2、表格分录最后一行出现汇总行实现代码转载于:https://www.cnblogs.com/fyq891014/p/4188779.html

SqlBulkCopy只支持SQL Server? EF Core实现支持多数据库类型的Bulk Copy

前言Microsoft SQL Server包含一个名为bcp的命令行实用工具&#xff0c;可以将较大文件快速大容量复制到SQL Server数据库的表或视图中&#xff0c;这种方法被称为Bulk Copy(批量复制)。Bulk Copy相比与循环插入有很大的性能优势&#xff0c;网上有很多测试文章&#xff0c;这里…

让TA们告诉你,疫情当下如何更彪悍的成长

全世界只有3.14 % 的人关注了爆炸吧知识真正决定人与人之间的差距的&#xff0c;其实是我们对事物的见识与内心的格局&#xff0c;见识的深浅决定人生的深浅&#xff0c;格局的大小决定了人生之路是宽是窄。今天给大家推荐几个有深度、有想法的公众号&#xff0c;希望能够给你带…

WEB前端开发规范

为什么80%的码农都做不了架构师&#xff1f;>>> 一、文件命名规范 images //图片资源&#xff0c;如果项目多人开发里面还需要用子文件夹分开fonts //字体资源&#xff0c;一般就是特殊字体嵌入或者图标字体styles //CSS文件- app.css //reset样式,如果项目小…

Goreplay来做流量回放

最近做项目&#xff0c;用到goreplay来做流量回放&#xff0c;什么是goreplay&#xff1f;GoReplay is an open-source network monitoring tool which can record your live traffic, and use it for shadowing, load testing, monitoring and detailed analysis.本质上就是通…

“Python简直万能!”拜托快醒醒!

全世界只有3.14 % 的人关注了爆炸吧知识在程序员中&#xff0c;一直流传着“Python除了不会生孩子&#xff0c;什么都会”的传说&#xff0c;Python真的是万能语言&#xff1f;很多使用Python的小伙伴&#xff0c;坚信 Python 可以做任何事情。到底是不是真的如传说中那般万能&…

linux--web服务器

WEB服务器也称为WWW(WORLD WIDE WEB)服务器&#xff0c;主要功能是提供网上信息浏览服务。 WWW 是 Internet的多媒体信息查询工具&#xff0c;是 Internet 上近年才发展起来的服务&#xff0c;也是发展最快和目前用的最广泛的服务。1.rpm -qa|grep httpd 查询服务是否安装…

WPF轮播图实现方式

WPF开发者QQ群&#xff1a; 340500857 | 微信群 -> 进入公众号主页 加入组织欢迎转发、分享、点赞、在看&#xff0c;谢谢~。 01—效果预览效果预览&#xff08;更多效果请下载源码体验&#xff09;&#xff1a;02—代码如下一、MasterCarousel.cs 代码如下using System; …

学过物理的人才能看懂的笑话,你能看明白几个?

全世界只有3.14 % 的人关注了爆炸吧知识1丈夫买了几斤廉价藕&#xff0c;满以为可对妻子炫耀了。不料妻子破口大骂&#xff1a;笨蛋&#xff01;为何不买别的菜&#xff0c;这藕一斤少说也有半斤窟窿啊&#xff01;还说便宜&#xff1f;2第一次坐飞机的两位老妇人在飞机起飞前找…

cisco 双ISP线路接入,链路自动切换方案

最近接到的一个项目&#xff0c;客户总部在惠州&#xff0c;分部在香港&#xff0c;在香港分部设有ERP服务器与邮件服务器&#xff0c;总部出口为铁通10M光纤与网通1M DDN 专线&#xff08;新增&#xff09;&#xff0c;原总部是用netscreen 防火墙与香港的pix 515作IPsec 对接…

js遮罩层以及移动端的上拉框

今天发一个之前写的移动端的项目&#xff0c;主要是讲一下遮罩层的应用&#xff0c;以及顺带提一下移动开发的一些事情。首先按钮点击弹出遮罩层这个大家很熟悉了&#xff0c;这里还是给大家提供一份代码&#xff0c;跟通用的没太大区别&#xff0c;主要讲一下方法&#xff1a;…

精简ABP的模块依赖

ABP的模块非常方便我们扩展自己的或使用ABP提供的模块功能&#xff0c;对于ABP自身提供的模块间的依赖关系想一探究竟&#xff0c;并且试着把不必要的模块拆掉&#xff0c;找到那部分核心模块。本次使用的是AspNetBoilerplate。源码下载从Github下载ABP源码后&#xff0c;进入s…

你这飞机会爆炸吗?航空公司含泪甩卖49元机票,却被超模君挖出秘密!

全世界只有3.14 % 的人关注了爆炸吧知识制作团队制作人 超模君编剧 恐恐恐插画 杨羊羊 友情出演 超模君 章小天……小天吐槽时刻……超模君之后还会采访谁呢小天有小道消息哦扫描这个二维码你将会有机会见识到超模君的科普沙雕网友们一起斗图↓↓↓↓…