输出缓存执行导致会话中的对象引用异常。如何解决这个问题?

时间:2016-08-11 15:20:08

标签: c# jquery angularjs asp.net-mvc-4

我现在在mvc C#项目中工作。我只想从输出缓存中获取一些值。因为它会减少DB中的循环。 所以我用 [OutputCache(持续时间= 1800,VaryByParam =“无”)]

当动作方法第一次被命中时,它正确获取列表值, Acually我指定了持续时间 30分钟。因此,对该操作方法的下一个请求不应该打击我的数据库,它必须提供缓存的结果。

BUt 它导致异常,显示“对象引用未设置为对象的实例”,来自Session

我的代码是:

**这是控制器动作**

    [HttpPost]
    [OutputCache(Duration = 1800, Location = OutputCacheLocation.Server, VaryByParam = "none")]
    public JsonResult GetStateList()
    {
        Result objResult = new Result();

       VRecruitService.StateClient objState = new VRecruitService.StateClient();
        using (CandidateModel objModel = new CandidateModel())
        {
            objResult.Data = objModel.GetStateList().Data;
        }
        return Json(objResult);
    }

和**这是模型类代码,我得到了异常**

     public static Employee User
     {
        get
        {
            object objUser = HttpContext.Current.Session["userDetails"]; 

            // In this above Session only im getting that Exception.

            if (objUser is VRecruitService.Employee)
                return (VRecruitService.Employee)objUser;
            else
                return null;
        }
        set 
        { 
            HttpContext.Current.Session["userDetails"] = value; 
        }
     }

请给我解决方案。谢谢。

1 个答案:

答案 0 :(得分:0)

我相信,因为你正在缓存输出,你需要用

来装饰控制器类
[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]

以便会话状态可用。此外,似乎HttpGet动词可能更有意义,因为您没有将数据发布到动作中。