为了账号安全,请及时绑定邮箱和手机立即绑定

禁用整个ASP.NET网站的浏览器缓存

禁用整个ASP.NET网站的浏览器缓存

慕哥9229398 2019-06-21 14:49:36
禁用整个ASP.NET网站的浏览器缓存我正在寻找一种方法来禁用浏览器缓存整个ASP.NETMVC网站我发现了以下方法:Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);Response.Cache.SetNoStore();还有一个元标记方法(它对我不起作用,因为一些MVC操作通过Ajax发送部分HTML/JSON,而没有Head,meta标记)。<meta http-equiv="PRAGMA" content="NO-CACHE">但我正在寻找一个简单的方法,以禁用整个网站的浏览器缓存。
查看完整描述

3 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

HttpContext.Current.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));

HttpContext.Current.Response.Cache.SetValidUntilExpires(false);

HttpContext.Current.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);

HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);

HttpContext.Current.Response.Cache.SetNoStore();

所有请求都会首先通过default.aspx进行路由-所以假设您可以弹出后面的代码。


查看完整回答
反对 回复 2019-06-21
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

创建从IActionFilter继承的类。

public class NoCacheAttribute : ActionFilterAttribute{  
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
        filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false);
        filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
        filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
        filterContext.HttpContext.Response.Cache.SetNoStore();

        base.OnResultExecuting(filterContext);
    }}

然后把属性放在需要的地方.。

[NoCache][HandleError]public class AccountController : Controller{
    [NoCache]
    [Authorize]
    public ActionResult ChangePassword()
    {
        return View();
    }}


查看完整回答
反对 回复 2019-06-21
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

与其使用你自己的东西,不如简单地使用为你提供的东西。

如前所述,不要禁用所有的缓存。例如,应该缓存ASP.NETMVC中大量使用的jQuery脚本。实际上,理想情况下,您应该使用CDN但我的观点是,应该缓存一些内容。

我发现这里最有效的方法是使用一个类,而不是到处撒[OutputCache]:

[System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]public class NoCacheController  : Controller{}

您希望禁用缓存的所有控制器,然后从该控制器继承。

如果需要覆盖NoCacheController类中的默认值,只需在操作方法上指定缓存设置,操作方法上的设置将优先。

[HttpGet][OutputCache(NoStore = true, Duration = 60, VaryByParam = "*")]public ViewResult Index(){
  ...}


查看完整回答
反对 回复 2019-06-21
  • 3 回答
  • 0 关注
  • 680 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信