Как кэшировать MVC3 ActionResult, который возвращает Json?

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

    [OutputCache(Duration = 86400, VaryByParam = "none")]
    public ActionResult GetCategories()
    {
        var request = (HttpWebRequest)WebRequest.Create(EXTERNAL API CALL);
        request.Accept = "application/json; charset=utf-8";
        var response = (HttpWebResponse)request.GetResponse();
        string result;
        using (var sr = new StreamReader(response.GetResponseStream()))
        {
            result = sr.ReadToEnd();
        }
        return Json(result);
    }

Этот метод выполняет вызов API к внешнему источнику, считывает результат, а затем возвращает результат в виде json для вызова AJAX. При наличии атрибута OutputCacheAttribute вызов ajax возвращает 500 (внутренняя ошибка сервера). Без этого атрибута все работает нормально.

Я делаю что-то не так, или есть лучшее предложение, которое я должен использовать в этой ситуации?

Спасибо!


person kamojoe    schedule 04.10.2011    source источник


Ответы (1)


Если у кого-то есть аналогичная проблема, я разобрался с проблемой. У меня было установлено значение CacheProfile, которого не было в файле web.config. Я знаю, что у меня не было этого атрибута в моем вопросе, поэтому... извините, если возникла путаница.

person kamojoe    schedule 14.10.2011
comment
Все в порядке, +1. У меня была точно эта проблема с методом контроллера, который возвращал изображение. CachProfile был значением по умолчанию, а управление кешем не использовалось в web.config. Вы указали мне правильный путь. - person Ian McLaird; 16.08.2012