7

HttpContext.Response.Cache知りたい-とHttpContext.Current.Cacheオブジェクトの違いは何ですか?およびAsp.netMVCWebアプリケーションで何を使用する必要がありますか?

なぜ私はこの質問をしているのですか?

なぜなら、私には独自の[NoCache]属性があり、ビューのリダイレクト中にキャッシュを回避する責任があります。

例えば

public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var cache = filterContext.HttpContext.Response.Cache;
        cache.SetExpires(DateTime.Now.AddDays(-1));
        cache.SetValidUntilExpires(false);
        cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
        cache.SetCacheability(HttpCacheability.NoCache);
        cache.SetNoStore();
        base.OnActionExecuting(filterContext);
    }

そして、私は私の中でこの上記の属性を使用していBaseControllerます。

[NoCache]
public class BaseController : Controller
{

}

これは問題なく動作します!

しかし、認証の部分で-私は以下のメカニズムによっていくつかの情報をキャッシュに保存しています

public ActionResult Login()
{
    HttpContext.Current.Cache.Insert("someKey", "someValue", null, expiredTime.Value, Cache.NoSlidingExpiration);
    return view();
}

だから、私の質問は..

私はコントローラーの基本クラスでカスタム属性を使用しています。これは、Loginメソッドコードによって設定されたアプリケーション全体でキャッシュキーと値にアクセスできますが、キャッシュアイテムをクリアする役割を果たします。

なぜこの両方のキャッシュメカニズムが異なる動作をするのですか?これら2つの違いは何ですか?

これに関するアイデアや情報を提案していただけませんか。

4

1 に答える 1

15

HttpContext.Current.Cacheは、あらゆる種類のシリアル化可能なオブジェクトのキャッシュを提供するクラスです。それ自体がHttpRuntime.Cacheあなたの水をさらに濁らせることに等しい。

HttpContext.Current.Cache通常、データベースサーバーからデータをキャッシュするために使用します。これにより、ほとんど変更されないデータをデータベースに継続的に要求する必要がなくなります。これは完全にサーバー側であり、クライアントには影響しません。

HttpResponse.Cache応答コンテンツとともに送信されるさまざまなキャッシュ制御ヘッダーを設定および制御できます。これにより、クライアント(およびその間のプロキシ)に、提案するキャッシュの種類が通知されます。クライアントがそれを尊重するかどうかは完全に恣意的であるため、私が提案すると言うことに注意してください。

于 2013-01-31T09:50:53.893 に答える