我的网站返回从磁盘获取的项目的信息(涉及控制器中的某些逻辑,因此它不仅仅是静态资产)。我尝试通过获取相应项目的文件写入时间,为未更改的项目返回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");
}
答案 0 :(得分:0)
我认为你需要像HTTP conditional GET这样的东西。 spec。
中的更多详细信息这是在ASP.NET中执行此操作的方法:http://optimizeasp.net/conditional-get
获取战利品