OutputCache не работает при использовании Reponse.Cookies

Я пытаюсь кэшировать ActionResult. В конкретном ActionResult я записываю некоторые данные в файлы cookie. Кэш вывода не работает в этом результате действия. Он отлично работает со всеми другими действиями, где я не использую Response.Cookies. Пожалуйста, помогите мне решить эту проблему.

Я использую ASP.NET MVC 4.


Редактировать

(Код включен)

 [OutputCache(Duration = 8000, VaryByParam = "*")]
    public ActionResult List(SearchViewModel searchViewModel, int page = 1, int mode = 1)
    {
        HttpCookie ck = Request.Cookies["Geo"];
        string lat = string.IsNullOrEmpty(Request.Params["lat"]) ? null : Request.Params["lat"];
        string lng = string.IsNullOrEmpty(Request.Params["lng"]) ? null : Request.Params["lng"];
        if (ck == null)
        {
            ck = new HttpCookie("Geo");
            Response.Cookies.Add(ck);
        }
        if (lat != null)
        {
            ck["Lat"] = lat;
            ck["Lon"] = lng;
            ck.Expires = DateTime.Now.AddMonths(2);
            Response.Cookies.Set(ck);
//this is the code which causes problem. If I remove this section catching will work
//other logic goes here.. 
        }
     }

person Moncy K    schedule 30.07.2013    source источник
comment
Можете ли вы опубликовать то, что вы пробовали до сих пор? Без кода мы не сможем увидеть, что вы делаете неправильно, и помочь.   -  person Adrian Thompson Phillips    schedule 30.07.2013
comment
Я обновил и включил код   -  person Moncy K    schedule 30.07.2013
comment
У меня такая же проблема, outputcache не будет работать, когда в действии записан файл cookie.   -  person Johan Wikström    schedule 04.12.2013


Ответы (2)


См. документацию Microsoft: https://msdn.microsoft.com/en-us/library/system.web.httpcookie.shareable(v=vs.110).aspx

Если заданный HttpResponse содержит один или несколько исходящих файлов cookie, а для параметра Shareable задано значение false (значение по умолчанию), кэширование вывода для ответа будет подавлено. Это предотвращает кэширование файлов cookie, содержащих потенциально конфиденциальную информацию, в ответе и их отправку нескольким клиентам.

Чтобы разрешить кеширование ответа, содержащего файлы cookie, настройте обычное кэширование для ответа, например, используя директиву OutputCache или атрибут MVC [OutputCache], и установите для всех исходящих файлов cookie значение Shareable равным true.

Итак, в основном, убедитесь, что у вас установлены все ваши файлы cookie:

cookie.Shareable = true; // Needed with Outputcache
person webStuff    schedule 10.08.2016

Я нашел ответ в этот другой вопрос.

Похоже, что OutputCache кэширует вывод запроса, поэтому для того же запроса с теми же параметрами он не будет запускать код в методе действия, он просто вернет тот же результат. Таким образом, ни один из ваших кодов не будет выполняться при последующих запросах.

Похоже, что ответ в другом сообщении имеет некоторые возможные обходные пути.

person Adrian Thompson Phillips    schedule 30.07.2013