日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/4 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 跑起來

總結

以上是生活随笔為你收集整理的Web服务器HttpServer(嵌入式设备)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。