如何用BeetleX.FastHttpApi定义路由URL映射、模板参数与重写规则详解【免费下载链接】FastHttpApia lightweight and high-performance http/websocket service component in the dotnet core platform that supports TLS.项目地址: https://gitcode.com/gh_mirrors/fa/FastHttpApi在 .NET Core 平台上开发 HTTP 服务时路由Route是决定 URL 如何映射到业务代码的核心机制。BeetleX.FastHttpApi作为一个轻量级、高性能的 HTTP/WebSocket 服务组件提供了极其简洁的路由定义方式你只需在方法上打一个特性Attribute就能完成URL映射用一对大括号就能声明模板参数而重写规则则让你在不改代码的前提下自由改造 URL。本文面向新手用最少的代码带你彻底搞懂 FastHttpApi 路由的三种核心玩法。一、BeetleX.FastHttpApi 是什么为什么路由这么重要BeetleX.FastHttpApi 是一个基于 .NET Core 的高性能 HTTP/WebSocket 服务组件支持 TLS 加密特点是极轻量、极快速。它没有复杂的框架约束路由定义完全靠 C# 特性完成天然契合约定优于配置的开发习惯。对新手来说路由就是访问哪个网址调用哪个方法。搞懂了路由你就掌握了整个框架的入口。二、一分钟搭建你的第一个路由服务先看最小可运行示例。创建控制台项目后只需两步定义控制器类继承ServerController或直接使用普通类 Controller特性启动服务public class Hello { public object SayHello(string name) { return $Hello {name}; } } class Program { static void Main(string[] args) { HttpApiServer server new HttpApiServer(); server.Register(typeof(Program).Assembly); server.Open(); Console.Read(); } }启动后访问http://localhost:9090/hello/sayhello?namebeetlex就能看到返回结果。默认 URL 映射规则是控制器名/方法名这也是 FastHttpApi 最基础的自动路由。三、URL映射三种方式自由控制网址默认路由虽然方便但真实项目中往往需要自定义 URL。FastHttpApi 提供了Get、Post、Put、Del四个特性定义见 PostAttribute.cs每个特性都有Route属性支持三种写法方式一绝对路径以/开头✅[Get(Route /hello)] public object SayHello(string name) { return $Hello {name}; }访问地址变为http://localhost:9090/hello?namebeetlex与控制器名、方法名完全解耦。方式二相对当前控制器路径以{开头[Get(Route {id})] public object GetUser(int id) { ... }方式三相对根路径拼接[Get(Route users/{id})] public object GetUser(int id) { ... }这三种写法的拼接逻辑可以在 ActionHandlerFactory.cs 中看到以/开头视为绝对路径以{开头则拼接到控制器路径之后其余情况拼接到根路径之后。 提示Route中只要包含{...}形式的参数框架就会自动注册为路由模板无需手动声明。四、模板参数用{id}实现 RESTful 风格动态路由模板参数是路由的灵魂它让你能用/users/100这种 RESTful 风格替代?id100的查询串写法。语法非常简单在 URL 中写{参数名}框架会自动从路径中提取对应值并绑定到方法参数。[Get(Route /users/{id})] public object GetUser(int id) { return $查询用户ID{id}; }此时访问http://localhost:9090/users/100方法参数id会被自动赋值为100。模板参数的匹配原理模板解析的核心实现位于 RouteTemplateMatch.cs它会将模板拆分为固定片段Start/Eof和变量片段Name匹配时先比对固定片段再从 URL 中截取变量值。一个模板可以包含多个参数[Get(Route /orders/{orderId}/items/{itemId})] public object GetItem(long orderId, int itemId) { ... }访问/orders/100/items/5orderId100、itemId5自动完成绑定。参数名规则只需满足[A-Za-z0-9_]相关正则校验见 RouteAttribute.cs。五、重写规则不改代码也能改变 URL 结构如果说模板参数是前台展示那重写规则就是幕后导演。URL 重写Rewrite让你把对外暴露的地址悄悄转换成内部真实地址常用于接口版本迁移、短链接、兼容旧地址。5.1 用代码注册重写规则通过server.UrlRewrite.Add(原地址, 目标地址)一行即可完成server.UrlRewrite.Add(/v2/users/{id}, /users/{id});这样客户端访问/v2/users/100时内部会转发到/users/100。注意重写目标同样支持{参数名}模板参数会自动透传。相关实现见 RouteRewrite.cs。5.2 用配置文件管理重写规则当规则较多时推荐使用配置文件。框架约定从根目录读取rewrite.json文件加载逻辑见 RouteRewrite.cs[ { Host: , Url: /v2/users/{id}, Rewrite: /users/{id} }, { Host: , Url: /old/hello, Rewrite: /hello } ]配置文件的好处是改动即时生效无需重新编译发布特别适合运维同学独立维护。5.3 进阶按 Host 域名的重写规则RouteRewrite.Add还支持传入host参数实现同一个 URL不同域名访问不同资源server.UrlRewrite.Add(api.example.com, /hello, /hello-internal);此时只有来自api.example.com的请求才会触发该规则域名前缀的匹配逻辑在 UrlRoute.cs 中通过UrlPrefix实现。六、路由性能调优两个关键配置FastHttpApi 内置了LRU 路由缓存重写结果会被缓存起来避免重复匹配相关选项定义在 HttpOptions.cs配置项默认值作用RewriteIgnoreCasetrue重写匹配是否忽略大小写RewriteCachedSize500000路由缓存的最大条目数server.Options.RewriteIgnoreCase true; // 忽略大小写URL 更友好 server.Options.RewriteCachedSize 100000; // 按需调整缓存大小在路由匹配时框架会优先按路径层级PathLevel分组查找见 RouteGroup.cs匹配效率极高这也是 FastHttpApi 能保持高性能的原因之一。七、总结一张表记住路由核心要点 需求用什么示例自定义 URL[Get/Post/Put/Del(Route...)][Get(Route/hello)]路径参数模板{参数名}[Get(Route/users/{id})]URL 重写UrlRewrite.Add或rewrite.jsonAdd(/v2/u/{id}, /u/{id})域名区分Add(host, url, rewrite)按 Host 前缀隔离性能调优RewriteCachedSizeLRU 缓存命中加速掌握了 URL映射、模板参数与重写规则这三板斧你就能随心所欲地设计 RESTful 接口、优雅迁移旧接口。BeetleX.FastHttpApi 的路由设计大道至简——一个特性定义映射一对大括号声明参数一行代码完成重写。现在就去动手试试吧你离路由大师只差一个{id}的距离【免费下载链接】FastHttpApia lightweight and high-performance http/websocket service component in the dotnet core platform that supports TLS.项目地址: https://gitcode.com/gh_mirrors/fa/FastHttpApi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考