Asp.net 如何在MVC4中将对象添加到缓存并从缓存访问数据?

Asp.net 如何在MVC4中将对象添加到缓存并从缓存访问数据?,asp.net,asp.net-mvc,asp.net-mvc-3,caching,asp.net-mvc-4,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Caching,Asp.net Mvc 4,嗨,我有一个对象,它返回这样的数据 var productdetial= { "productId": "1", "productname": "Casualshirts", "productSkus": [

嗨,我有一个对象,它返回这样的数据

         var productdetial=  {
                               "productId": "1",
                               "productname": "Casualshirts",
                               "productSkus": [
                                                   {
                                                     "Skuimage": "URL",
                                                     "SKU": [
                                                               {
                                                                  "ProducSKU": "Shoe1001",
                                                                  "Options": [
                                                                                {
                                                                                  "productOptions": [
                            {
                                "OptionID": "1",
                                "optionname": "Color",
                                "value": "Black"
                            },
                            {
                                "OptionID": "2",
                                "optionname": "Size",
                                "value": "S"
                            },
                            {
                                "OptionID": "3",
                                "optionname": "Fit",
                                "value": "Regular"
                            }
                        ]
                    }
                ]
            },
            {
                "ProducSKU": "Shoe1002",
                "Options": [
                    {
                        "productOptions": [
                            {
                                "OptionID": "1",
                                "optionname": "Color",
                                "value": "Red"
                            },
                            {
                                "OptionID": "2",
                                "optionname": "Size",
                                "value": "S"
                            },
                            {
                                "OptionID": "3",
                                "optionname": "Fit",
                                "value": "Regular"
                            }
                        ]
                    }
                ]
            },
            {
                "ProducSKU": "Shoe1003",
                "Options": [
                    {
                        "productOptions": [
                            {
                                "OptionID": "1",
                                "optionname": "Color",
                                "value": "Orange"
                            },
                            {
                                "OptionID": "2",
                                "optionname": "Size",
                                "value": "S"
                            },
                            {
                                "OptionID": "3",
                                "optionname": "Fit",
                                "value": "Regular"
                            }
                        ]
                    }
                ]
            }
        ]
ProductDetails object = (ProductDetails) HttpContext.Current.Application["productdetial"]

现在我要做的是把这些数据保存在缓存中,并将这些数据绑定到我的视图中,现在我想要的是,当我从现在开始发出请求时,我应该能够从缓存中的上述对象访问数据……有人能帮我怎么做吗?我如何将此对象添加到缓存并从那里访问数据?你可以将其放入应用程序缓存中,以便可以从任何地方访问它

HttpContext.Current.Application["productdetial"] = productdetial;
然后你可以从任何地方像这样访问它

         var productdetial=  {
                               "productId": "1",
                               "productname": "Casualshirts",
                               "productSkus": [
                                                   {
                                                     "Skuimage": "URL",
                                                     "SKU": [
                                                               {
                                                                  "ProducSKU": "Shoe1001",
                                                                  "Options": [
                                                                                {
                                                                                  "productOptions": [
                            {
                                "OptionID": "1",
                                "optionname": "Color",
                                "value": "Black"
                            },
                            {
                                "OptionID": "2",
                                "optionname": "Size",
                                "value": "S"
                            },
                            {
                                "OptionID": "3",
                                "optionname": "Fit",
                                "value": "Regular"
                            }
                        ]
                    }
                ]
            },
            {
                "ProducSKU": "Shoe1002",
                "Options": [
                    {
                        "productOptions": [
                            {
                                "OptionID": "1",
                                "optionname": "Color",
                                "value": "Red"
                            },
                            {
                                "OptionID": "2",
                                "optionname": "Size",
                                "value": "S"
                            },
                            {
                                "OptionID": "3",
                                "optionname": "Fit",
                                "value": "Regular"
                            }
                        ]
                    }
                ]
            },
            {
                "ProducSKU": "Shoe1003",
                "Options": [
                    {
                        "productOptions": [
                            {
                                "OptionID": "1",
                                "optionname": "Color",
                                "value": "Orange"
                            },
                            {
                                "OptionID": "2",
                                "optionname": "Size",
                                "value": "S"
                            },
                            {
                                "OptionID": "3",
                                "optionname": "Fit",
                                "value": "Regular"
                            }
                        ]
                    }
                ]
            }
        ]
ProductDetails object = (ProductDetails) HttpContext.Current.Application["productdetial"]
如果您想存储和检索这个字符串,那么这也是可能的。请注意,如果需要特定于用户会话的缓存,请使用“会话”表而不是“应用程序”

还有另一种类型的缓存OutputCache可以应用于控制器操作,如下所示。在300秒的持续时间内,这将向客户端提供缓存输出

[OutputCache(Duration=300, VaryByParam="none")]
 public ActionResult GetProductDetails()
 {
      //Fetch the data once and it will be cached for 300 seconds       
            return View(data);
 }

看起来你需要以上两种中的一种。还有其他类型的缓存,如甜甜圈缓存和甜甜圈洞缓存,如果您只希望缓存视图的某些部分,则可以使用这些缓存。在圆环孔缓存中,您可以将上述缓存操作作为操作包含到另一个视图中。

您可以使用httpcontext缓存:

if(HttpContext.Cache.Get("productdetial") == null)
{
  HttpContext.Cache.Add("productdetial", productdetial, null, Cache.NoAbsoluteExpiration,
                                          new TimeSpan(0, 1, 0), CacheItemPriority.Normal, null);
}else
{
  cached = (ProductDetails) HttpContext.Cache.Get("productdetial");
}

…此语句中的ProductDetails对象=(ProductDetails)HttpContext.Current.Application[“productdetial”]是存储在应用程序缓存中的对象的类型,我假定为“ProductDetails”类型。您甚至可以存储json字符串。然后使用字符串代替“ProductDetails”来存储和检索对象。应用缓存是一种键值哈希表。键可以是一个简单的字符串。该值可以是任何类型的对象。如果您只需要在控制器操作中缓存某些服务调用,并且需要取消缓存其余的服务调用,那么这非常好。