1

これは何らかの理由で機能しません:

    [OutputCache(Duration = 600, VaryByParam = "id")]
    public string GetSomeValue(int id)
    {
        return _service.GetSomeValue(id).ToString();
    }

ビューを返すコントローラーでこれをテストしましたが、動作します。

理由はありますか?または可能な回避策はありますか?

4

1 に答える 1

1

属性は、このメソッドではなくアクション自体に配置する必要があります

  [OutputCache(Duration = 600, VaryByParam = "id")]
   Public ActionResult Get(int id)

あなたのコメントに基づいて、サーバーのキャッシュを探しているようです。memcached や Redis などをお勧めしますが、IIS に組み込まれているキャッシュを使用することもできます。いつキャッシュをバーストする必要があるか、および Web ファームにいる場合は配布をどのように処理するかを認識しておく必要があることに注意してください。最も簡単な形式でこれを試すことができます

public string GetSomeValue(int id)
{
  var cachedItem = HttpRuntime.Cache.Get(id.ToString());
  if(cachedItem==null){
     value = _service.GetSomeValue(id).ToString();
     cachedItem = HttpRuntime.Cache.Add(id.ToString(), value);
  }
  return cachedItem;
}

追加の完全なオプションにより、スライドまたは絶対有効期限を設定できます

public object Add(
         string key, 
         object value, 
         System.Web.Caching.CacheDependency dependencies, 
         System.DateTime absoluteExpiration, 
         System.TimeSpan slidingExpiration, 
         System.Web.Caching.CacheItemPriority priority,  
         System.Web.Caching.CacheItemRemovedCallback onRemoveCallback)

たとえば、依存関係には null を渡しますが、必要に応じて有効期限を設定します。

于 2012-11-08T15:36:49.093 に答える