public static class CacheExtensions
{
public static bool IsModified(this Controller controller, DateTime updatedAt)
{
var headerValue = controller.Request.Headers["If-Modified-Since"];
if (headerValue.Count>0)
{
var modifiedSince = DateTime.Parse(headerValue).ToLocalTime();
if (modifiedSince >= updatedAt)
{
return false;
}
}
return true;
}
public static ActionResult NotModified(this Controller controller)
{
return new StatusCodeResult(304);
}
public static void Modified(this Controller controller, DateTime updatedAt)
{
controller.Response.Headers.Add("Last-Modified", updatedAt.ToUniversalTime().ToString("R"));
}
}
Для корректного сравнения в if (modifiedSince >= updatedAt) надо отсечь миллисекунды.
var dateTime = new DateTime(dt.Ticks - (dt.Ticks % TimeSpan.TicksPerSecond),dt.Kind);
if (!this.IsModified(UpdatedAt))
return this.NotModified();
else this.Modified(UpdatedAt);