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"));
}
} (编辑:日照站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 将ASP.NET应用程序本地化为普通话
- asp.net – Stripe Webhook事件续订订阅
- asp.net-core – 在Visual Studio CTP2中的ASP.VNext项目中
- entity-framework-4 – 当超出范围时,Ninject不调用对对象的
- asp.net – 如何在页面加载时以“添加新”模式进行编程设置
- asp.net-mvc – 如何在RegularExpression中忽略大小写?
- iis-7.5 – 使用虚拟目录/应用程序在IIS中托管ASP.NET 5 We
- ASP.NET对txt文件相关操作(读
- asp.net – 基于函数式编程的UI
- asp.net-identity – UseOAuthBearerTokens vs UseOAuthBea
- asp.net – 以纯文本识别URL
- asp.net – 我可以重新发布或携带POST数据(如果是
- 如何利用ASP.net IIS 7.5中的浏览器缓存
- asp.net – UpdatePanel中的动态创建控件?
- asp.net-mvc – MVC应用程序调试错误:viewstate
- asp.net-mvc – 可以浏览DataAnnotations的自定义
- asp.net中mvc使用ajax提交参数的匹配问题解决探讨
- asp.net-web-api – WebApi2属性路由404
- asp.net-mvc – 为什么我的ActionFilters都没有运
- asp.net-mvc – LINQ to Entities无法识别方法异
