Мой веб-сайт возвращает информацию для элементов, которые они берут с диска (с использованием некоторой логики, расположенной в контроллере, поэтому это не просто статические активы). Я попытался оптимизировать его, возвратив 304 для элементов, которые не изменены, путем получения времени записи файла для соответствующего элемента. Теперь, после обновления кода, мое приложение по-прежнему считает, что элемент не обновляется и возвращает 304 - он не понимает, что код приложения изменен, поэтому результат будет другим. Из-за этого пользователи сразу не видят обновление, только после того, как они избавятся от своего кеша. Я хотел бы решить эту проблему, проверив не только «время обновления элемента», но и «время обновления приложения». Есть ли способ получить что-то вроде времени, когда приложение было обновлено? К этому времени я хотел бы видеть максимальный срок обновления всех файлов приложений.Есть ли что-нибудь вроде «времени обновления» для приложения ASP.NET-MVC?
UPD: Как просили пример кода, здесь несколько упрощенный вариант:
public static DateTime? LastKnownDate(this HttpRequestBase request)
{
if (!string.IsNullOrEmpty(request.Headers["If-Modified-Since"]))
{
var provider = CultureInfo.InvariantCulture;
DateTime date;
if (DateTime.TryParse(
request.Headers["If-Modified-Since"],
provider,
DateTimeStyles.RoundtripKind,
out date)) return date;
}
return null;
}
public ActionResult Test(int id)
{
var path = @"C:\data\" + id;
var file = new FileInfo(path);
if (!file.Exists) return HttpNotFound();
var date = Request.LastKnownDate();
if (date != null && date >= file.LastWriteTimeUtc)
{
return Response.NotModified();
}
Response.AddHeader("Last-Modified", file.LastWriteTimeUtc.ToString("o"));
return File(path, "application/octet-stream");
}
ли агенты пользователей получать реальный 304 с сервера, или притворяется один, потому что они думают, локальная кешированная копия остается действительной и возвращает ее без запроса сервера? – Albireo
@Albireo, интересно ... знаете ли, если хром обычно подделывает 304? Я тестирую, используя онлайн-версию сервера, ничего особенного ... – ironic
@Albireo, в любом случае Fiddler показывает запрос на сервер ... так что я думаю, что запросы реальны :) – ironic