asp.net – 最后修改标头在MVC
我最近遇到了最后修改的标题。 >如何和在哪里可以将其包括在MVC? 我想要一个示例如何最后修改的标题可以包括在mvc项目,静态页面和数据库查询以及? 它是不同于outputcache,如果是如何? 基本上,我想让浏览器自动清除缓存并显示最新的数据或页面,而不需要用户刷新或清除缓存。 解决方法Last-Modified主要用于缓存。它被发送回资源,您可以跟踪修改时间。资源不一定是文件,而是任何东西。例如从具有UpdatedAt列的dB信息生成的页面。它与If-Modified-Since头结合使用,每个浏览器在请求中发送(如果它先前已经接收到Last-Modified头)。
Response.AddHeader
对动态生成的页面启用细粒度缓存(例如,您可以使用DB字段UpdatedAt作为最后修改的头)。 例 要使一切工作,你必须做这样的事情: 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 Disclamer:我不知道ASP.NET / MVC3是否支持你自己管理Last-Modified。 更新 您可以创建一个扩展方法: 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"); } } 然后使用它们像这样: 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")); } } (编辑:鲜蔬坊站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- azure – 当用户存储在外部身份提供程序服务中时与用户的关
- ASP.NET MVC编辑器模板和Html.EditorFor(…) – 如何消除类
- ASP.NET Core使用SkiaSharp实现验证码的示例代码
- ASP.NET两个截取字符串的方法分享
- WCF服务与ASP.NET Web Api
- 将ASP.NET应用程序本地化为普通话
- asp.net-mvc – SelectListItem中的Selected属性永远不会起
- asp.net neatUpload 支持大文件上传组件
- asp.net – 如何在gridview中将navigateurl添加到超链接
- asp.net-mvc – DropDownListFor在编辑视图上不重复的项目(
- asp.net代码中修改web.config节点的具体方法
- [转]谈谈技术原则,技术学习方法,代码阅读及其它
- asp.net-mvc – 值不能为空或为空.参数名称:con
- asp.net-mvc-3 – dataannotations在主键上设置标
- asp.net-mvc – MVC Razor – 如何向自己提交表单
- asp.net-mvc – 有什么技巧/技巧使用亚音速与Asp
- asp.net-mvc – 如何在多个Asp.net MVC应用程序中
- ASP.NET和System.Diagnostics跟踪 – 我错过了什
- asp.net-mvc – 在MVC Razor视图中使用@RenderBo
- asp.net-mvc – 删除布局将默认为_ViewStart,为什