(点)液体:是否可以分配视图模型属性或调用视图模型方法?

Pie*_*one 1 liquid dotliquid

使用DotLiquid库,这是关于Liquid安全性的问题。

假设我的视图模型如下(伪代码):

class MyViewModel
    public string MyField
    public string MyMethod()
Run Code Online (Sandbox Code Playgroud)

...,然后将MyViewModel对象传递给Liquid模板,其中将MyField设置为可从模板内部访问(以便模板可以读取其内容)。

  1. 可以将MyField分配给吗?即模板可以修改视图模型的内容吗?
  2. 可以调用MyMethod()吗?呈现模板时,未将“ MyMethod”成员配置为可从模板访问。
  3. 如果在渲染模板时将“ MyMethod”成员配置为可访问,将会发生什么?从Liquid模板可以进行方法调用吗?

我的假设是答案不是所有问题,但我想确定。

谢谢。

Tim*_*nes 5

  1. 不,MyField无法分配给。实际上,根本无法访问它-在DotLiquid中只能访问公共实例方法和属性。
  2. 这取决于您如何向DotLiquid“注册”此视图模型:
    • 如果视图模型继承自DotLiquid的Drop类,则所有公共实例方法和属性都将可访问。
    • 如果它不继承自Drop,则您可能正在使用Template.RegisterSafeType(Type type, string[] allowedMembers)方法,这要求您告诉DotLiquid(可以使用allowedMembers参数)可以访问哪些属性和方法。
  3. 是的,可以进行方法调用,但是DotLiquid仅支持无参数方法。