Pal*_*ani 199 asp.net asp.net-mvc caching browser-cache
我正在寻找一种方法来禁用整个ASP.NET MVC网站的浏览器缓存
我找到了以下方法:
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Run Code Online (Sandbox Code Playgroud)
还有一个元标记方法(它对我不起作用,因为一些MVC动作通过Ajax发送部分HTML/JSON,没有头部元标记).
<meta http-equiv="PRAGMA" content="NO-CACHE">
Run Code Online (Sandbox Code Playgroud)
但我正在寻找一种简单的方法来禁用整个网站的浏览器缓存.
JKG*_*JKG 365
创建一个继承自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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后把属性放在需要的地方
[NoCache]
[HandleError]
public class AccountController : Controller
{
[NoCache]
[Authorize]
public ActionResult ChangePassword()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
Ada*_*SFT 132
不要自己动手,只需使用为您提供的内容即可.
如前所述,不要禁用所有内容的缓存.例如,应该缓存ASP.NET MVC中大量使用的jQuery脚本.实际上理想情况下你应该为那些人使用CDN,但我的观点是应该缓存一些内容.
我觉得这里最好用而不是在各处洒[OutputCache]就是使用一个类:
[System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public class NoCacheController : Controller
{
}
Run Code Online (Sandbox Code Playgroud)
您要禁用缓存的所有控制器都将从此控制器继承.
如果需要覆盖NoCacheController类中的默认值,只需在操作方法上指定缓存设置,Action方法的设置优先.
[HttpGet]
[OutputCache(NoStore = true, Duration = 60, VaryByParam = "*")]
public ViewResult Index()
{
...
}
Run Code Online (Sandbox Code Playgroud)
Squ*_*gs. 92
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();
Run Code Online (Sandbox Code Playgroud)
所有请求首先通过default.aspx路由 - 所以假设你可以在那里弹出代码.
Edw*_*rey 10
您可能希望禁用由控制器(即HTML页面)呈现的所有页面的浏览器缓存,但为脚本,样式表和图像等资源保留缓存.如果您正在使用MVC4 +捆绑和缩小,则需要保留脚本和样式表的默认缓存持续时间(非常长的持续时间,因为缓存基于对唯一URL的更改而不是基于时间而变得无效).
在MVC4 +中,要禁用所有控制器上的浏览器缓存,但将其保留用于未由控制器提供的任何内容,请将其添加到FilterConfig.RegisterGlobalFilters:
filters.Add(new DisableCache());
Run Code Online (Sandbox Code Playgroud)
定义DisableCache如下:
class DisableCache : ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
129635 次 |
| 最近记录: |