ASP.NETキャッシュでキャッシュアスペクトを使用しています。ReturnValueに基づいて条件を作成する必要があります。
問題を単純化しました。単純なPOCOオブジェクトを返すメソッドでCacheResultアスペクトを使用します。
定義は次のとおりです。
public class MyData
{
public string MyProperty { get; set; }
}
public class MyResponse
{
public int MyId { get; set; }
public MyData [] Result { get; set; }
}
キャッシュの作成条件が必要です-MyResponse.MyData.Lenghtがバッチ制限よりも大きい場合にのみ結果をキャッシュします。
[CacheResult("AspNetCache", "'MyResponse.MyId=' + #id",
Condition = "MyResponse.Result.Length > #batchLimit")]
public MyResponse GetResponse(int id, int batchLimit)
{
Thread.Sleep(5000);
return new MyResponse
{
MyId = 1,
Result =
new MyData[]
{
new MyData {MyProperty = "A"}, new MyData {MyProperty = "B"},
new MyData {MyProperty = "C"},
}
};
}
私はこの条件の定義を試しました:
Condition = "MyResponse.Result.Length > #batchLimit"
このエラーが発生しました:
「MyResponse」ノードは、指定されたコンテキスト[Sample.MyResponse]に対して解決できません。
だから私は2番目のバージョンを試しました:
Condition = "'MyResponse.Result.Length' > #batchLimit"
エラーで終了しました:
Cannot compare instances of [System.String] and [System.Int32] because they cannot be coerced to the same type.
私はそれをグーグルで検索 ReturnValue
します。次のようなキーワードを使用できます。
Condition = "#ReturnValue != null"
しかし、どうすればにアクセスできるのかわかりませんMyResponse.MyData.Length
。