0

私の Web サイトは、ディスクから取得したアイテムの情報を返します (コントローラーにあるいくつかのロジックを含むため、単なる静的アセットではありません)。対応するアイテムのファイル書き込み時間を取得して、変更されていないアイテムに対して304を返すことで、最適化を試みました。コードを更新した後も、アプリケーションは項目が更新されていないと認識し、304 を返します。アプリケーション コードが変更されていることを認識していないため、結果が異なる場合があります。そのため、ユーザーはキャッシュを削除した後にのみ、更新をすぐに見ることはできません。「アイテムの更新時間」だけでなく、「アプリの更新時間」もチェックすることで、その問題を解決したいと考えています。アプリケーションが更新された時刻のようなものを取得する方法はありますか? この時点で、すべてのアプリケーション ファイルの更新時間の最大値を確認したいと思います。

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");
    }
4

1 に答える 1