asp.net – 最后修改标头在MVC

我最近遇到了最后修改标题

>如何和在哪里可以将其包括在MVC?
>包括它的优点是什么?

我想要一个示例如何最后修改标题可以包括在mvc项目,静态页面数据库查询以及?

它是不同于outputcache,如果是如何?

基本上,我想让浏览器自动清除缓存并显示最新的数据或页面,而不需要用户刷新或清除缓存。

解决方法

Last-Modified主要用于缓存。它被发送回资源​​,您可以跟踪修改时间。资源不一定是文件,而是任何东西。例如从具有UpdatedAt列的dB信息生成页面

它与If-Modified-Since头结合使用,每个浏览器在请求中发送(如果它先前已经接收到Last-Modified头)。

How and where can I include it in MVC?

Response.AddHeader

What are the advantages of including it?

对动态生成页面启用细粒度缓存(例如,您可以使用DB字段UpdatedAt作为最后修改的头)。

要使一切工作,你必须做这样的事情:

@H_404_33@public class YourController : Controller { public ActionResult MyPage(string id) { var entity = _db.Get(id); var headerValue = Request.Headers['If-Modified-Since']; if (headerValue != null) { var modifiedSince = DateTime.Parse(headerValue).ToLocalTime(); if (modifiedSince >= entity.UpdatedAt) { return new HttpStatusCodeResult(304,"Page has not been modified"); } } // page has been changed. // generate a view ... // .. and set last modified in the date format specified in the HTTP rfc. response.addheader('Last-Modified',entity.UpdatedAt.ToUniversalTime().ToString("R")); } }

您可能需要在DateTime.Parse中指定格式。

参考文献:

> HTTP status codes
> HTTP headers

disclamer:我不知道ASP.NET / MVC3是否支持你自己管理Last-Modified。

更新

您可以创建一个扩展方法

@H_404_33@public static class CacheExtensions { public static bool IsModified(this Controller controller,DateTime updatedAt) { var headerValue = controller.Request.Headers['If-Modified-Since']; if (headerValue != null) { var modifiedSince = DateTime.Parse(headerValue).ToLocalTime(); if (modifiedSince >= updatedAt) { return false; } } return true; } public static ActionResult NotModified(this Controller controller) { return new HttpStatusCodeResult(304,"Page has not been modified"); } }

然后使用它们像这样:

@H_404_33@public class YourController : Controller { public ActionResult MyPage(string id) { var entity = _db.Get(id); if (!this.IsModified(entity.UpdatedAt)) return this.NotModified(); // page has been changed. // generate a view ... // .. and set last modified in the date format specified in the HTTP rfc. response.addheader('Last-Modified',entity.UpdatedAt.ToUniversalTime().ToString("R")); } }

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....