1

これは、DotLiquid ライブラリを使用した Liquid の安全性に関する質問です。

ビューモデルが次のようなものであるとします (疑似コード):

class MyViewModel
    public string MyField
    public string MyMethod()

...そして MyViewModel オブジェクトが Liquid テンプレートに渡され、ここで MyField がテンプレート内からアクセスできるように設定されます (テンプレートがそのコンテンツを読み取れるようにするため)。

  1. MyField を割り当てることはできますか? つまり、テンプレートはビュー モデルの内容を変更できますか?
  2. MyMethod() を呼び出すことはできますか? レンダリング時にテンプレートからアクセスできるように構成された「MyMethod」メンバーはありません。
  3. テンプレートをレンダリングするときに「MyMethod」メンバーにアクセスできるように構成するとどうなりますか? Liquid テンプレートからのメソッド呼び出しは可能ですか?

私の仮定では、答えはすべての質問に対してノーですが、確認したいと思います。

ありがとうございました。

4

1 に答える 1

5
  1. いいえ、MyField配属できません。実際には、まったくアクセスできません。DotLiquid でアクセスできるのは、パブリック インスタンス メソッドとプロパティのみです。
  2. このビュー モデルを DotLiquid に「登録」する方法によって異なります。
    • ビュー モデルが DotLiquid のDropクラスを継承する場合、すべてのパブリック インスタンス メソッドとプロパティにアクセスできます。
    • から継承されていない場合Dropは、おそらくメソッドを使用することになります。Template.RegisterSafeType(Type type, string[] allowedMembers)これには、アクセスできるプロパティとメソッドを DotLiquid に伝える必要があります (allowedMembersパラメーターを使用)。
  3. はい、メソッド呼び出しは可能ですが、DotLiquid はパラメーターのないメソッドのみをサポートしています。
于 2014-05-27T07:40:12.023 に答える