用过ASP.NET Razor Pages的开发者,多半对那种页面与模型清晰分工的写法印象深刻。但你有没有想过,如果把背后的模板语言换成设计更安全、对非开发人员更友好的Liquid,会是一种怎样的体验?
Kinetq开源的LiquidPages,就是这样一个C#库。它将Razor Pages式的MVVM理念带到了Liquid模板体系中,并且不挑Web服务器——无论是EmbedIO、自定义HTTP监听,还是其他能递进请求的服务,它都能轻松接入。
在模板安全这件事上,LiquidPages选择了一条很务实的路线。底层依赖Fluid库来解析和渲染Liquid模板,而Liquid本身出自Shopify之手,沙箱化的设计让它天然适合承载可能脱离源码管理、由设计师或运营人员直接编辑的内容。
框架的结构理解起来并不复杂。每个页面绑定一个页面模型,模型在渲染时向Liquid模板提供强类型的视图数据。换句话说,“.liquid文件负责呈现,C#页面模型负责数据与逻辑”——这一套分工,和Razor Pages几乎是同一个思路。
除了模板安全与熟悉的开发模式,还有几个设计值得关注。首先,模板文件可以分布在解决方案里的任意C#项目中,来源可以是物理文件、嵌入资源,或者复合文件提供器,部署灵活度相当高。其次,框架本身以中间件形式出现,内置了针对EmbedIO的现成模块,如果想接别的服务器,自己写一个也不会太费事。
上手流程被刻意压得很短。装好Kinetq.LiquidPages的NuGet包,在依赖注入容器里调用“services.AddLiquidPages()”注册服务,然后为所选Web服务器配好中间件,准备工作就基本完成了。
真正让这一切跑起来的关键,是启动阶段的路由与过滤器注册。应用需要注入ILiquidStartup接口,在启动过程中依次调用RegisterPageModels和RegisterFilters两个方法,框架才能知道该处理哪些路由、用哪些类型来承接请求。
当请求进来之后,中间件层面的ILiquidResponseMiddleware就接手了。它接收一个封装了路由、查询参数、请求头和请求体的LiquidRequestModel,在已注册的路由集合中逐一匹配请求路径,找到对应规则后就渲染对应页面,最终输出一个可直接写回响应流的LiquidResponseModel。
热门跟贴