是否有类似ASP.NET-MVC应用程序的“更新时间”?

时间:2014-10-24 11:45:34

标签: c# asp.net-mvc http-caching http-status-code-304

我的网站返回从磁盘获取的项目的信息(涉及控制器中的某些逻辑,因此它不仅仅是静态资产)。我尝试通过获取相应项目的文件写入时间,为未更改的项目返回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");
    }

1 个答案:

答案 0 :(得分:0)

我认为你需要像HTTP conditional GET这样的东西。 spec

中的更多详细信息

这是在ASP.NET中执行此操作的方法:http://optimizeasp.net/conditional-get

还可以在Improving Performance with Output Caching

获取战利品