2016-12-16 10 views
1

OutputCacheの継続時間を設定すると、キャッシュされた値が期限切れになりますか?もしそうなら、私はそれを見ていない。ASP.NET MVC - OutputCache - 設定の有効期間がキャッシュされた値の有効期限ですか?

[OutputCache(Duration = 1, Location = OutputCacheLocation.Client, VaryByParam = "none", NoStore = true)] 
    public ActionResult Index() 
    { 
     if (System.Web.HttpContext.Current.Cache["time"] == null) 
     { 
      System.Web.HttpContext.Current.Cache["time"] = DateTime.Now; 
     } 
    } 

私はOutputCacheを使用するのが初めてですので、初心者の質問に間違いがあります。しかし、期間を指定することによって、割り当てられた時間の後に何かが起こると私は理解していました。上記の私のコードスニペットでは、私の視界をリフレッシュする時に関係なく、時間は持続します。

答えて

1

OutputCacheをHttpContext.Current.Cacheと混同しています。キャッシュが期限切れになっていない場合、アクションをヒットしたときにキャッシュされたビューを返すために、最初のキャッシュが使用されます。そしてそれについて、あなたは正しいです。 1秒ごとに新しいビューが返されます。

ただし、DateTime.Nowで埋めているHttpContext.Current.Cacheは期限切れになりません。あなたは絶対有効期限を定義していないので

https://msdn.microsoft.com/en-us/library/system.web.caching.cache(v=vs.110).aspx

この

System.Web.HttpContext.Current.Cache["time"] = DateTime.Now; 

を行うと、この

System.Web.HttpContext.Current.Cache.Insert("time", DateTime.Now, null, System.Web.Caching.Cache.NoAbsoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration) 

Insertメソッドを使用し、適切に有効期限を定義し、それと同じですうまくいくはずです。

+0

「アクションを実行したときにキャッシュされたビューを返す」の方が少し深いことがありますか?私はまさにあなたが意味することに従っていません。その時点でどのようなキャッシュビューが返されますか? –

+0

MSDNから:出力がキャッシュされるアクションメソッドをマークするために使用される属性を表します。 これは、ビューに戻されているものを参照していますか? –

+0

はい。たとえば、フィードのリストを持つモデルにすることができます。しかし、あなたの場合、データはHttpContextによってキャッシュされています。代わりにビューバックに日付を入れてみてください。 –

関連する問題