Атрибут OutputCache игнорируется в MVC 3 - PullRequest
2 голосов
/ 09 февраля 2012

Поэтому у меня возникла проблема с тем, что IE 7 может загружать файл с сайта SSL, встроенного в MVC 3. Чтобы IE 7 мог сохранять файл с сайта SSL, он должен иметь возможность кэширования.

Код метода:

[OutputCache(Location = OutputCacheLocation.ServerAndClient, Duration = 20, VaryByParam = "none", NoStore = true )]
public override FileContentResult Export(int? id, string extra)
{
...
return new FileContentResult(byte[], mimetype);
}

Это работает в IE9, Chrome, Safari и Firefox. Я пробовал различные настройки для VaryByParam, Duration и NoStore. Когда я изменяю какие-либо из этих настроек, заголовки ответа никогда не меняются.

Cache-Control: без кеша, без хранилища, обязательна повторная проверка

Content-Disposition: вложение; имя файла = PersonalInfo-02092012.xlsx

Content-Length: 11933

Content-Type: применение / vnd.openxmlformats-officedocument.spreadsheetml.sheet

Дата: четверг, 09 февраля 2012 18:16:35 GMT

Expires: -1

Pragma: нет кэша

Сервер: Microsoft-IIS / 7,5

Любая помощь будет оценена.

1 Ответ

4 голосов
/ 10 февраля 2012

Я решил это сам, но оставляю его там, чтобы он мог быть полезен кому-то еще.

Проблема заключалась в том, что пользовательский атрибут ActionFilterAttribute вручную устанавливал информацию о кеше, и поэтому кэширование, которое я устанавливал в действии, игнорировалось.

Атрибут, о котором идет речь, обрезан для краткости:

public class CustomAttributeName: ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var cache = filterContext.HttpContext.Response.Cache;
        cache.SetExpires(DateTime.UtcNow.AddDays(-1));
        cache.SetValidUntilExpires(false);
        cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
        cache.SetCacheability(HttpCacheability.NoCache);
        cache.SetNoStore();

        base.OnActionExecuting(filterContext);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...