如何禁用asp.net网站的所有的浏览器缓存?(代码片段)

dotNET跨平台 dotNET跨平台     2022-12-21     172

关键词:

咨询区

  • Palani

我在寻找一个方法禁用某个 ASP.NET MVC 网站的所有浏览器缓存,我发现了如下方法。


Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
Response.Cache.SetNoStore();

而且我也发现了可以在 html 上追加一个 meta 标记。


<meta http-equiv="PRAGMA" content="NO-CACHE">

但这种方式不适合我,因为我的网站中会有一些 ajax 请求,自然就无法携带meta了。

请问我如何在全局作用域下实现这么一个禁用浏览器缓存的功能?

回答区

  • JKG

可以自定义一个继承 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] 标记即可,比如下面的 Controller。


[NoCache]
[HandleError]
public class AccountController : Controller

    [NoCache]
    [Authorize]
    public ActionResult ChangePassword()
    
        return View();
    


  • NidhinSPradeep

你可以在  Global.asax 下的 Application_BeginRequest 方法中实现此功能。


    protected void Application_BeginRequest()
    
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
        Response.Cache.SetNoStore();
    

  • JKG

你可以使用 Asp.NET 自带的 OutputCache 特性。


[System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]

直接使用 OutputCache 特性的话,会让这些代码零散在项目各处,更好的做好应该是封装到一个 Controller 中,然后让需要的 Controller 继承此 Controller 即可,比如下面的代码。


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



public class HomeController : NoCacheController



点评区

全局禁用浏览器的Cache,这需求有点奇葩哈,不过本篇也学习到了如何全局性的配置,有收获。

如何在 ASP.NET core rc2 中禁用浏览器缓存?

】如何在ASP.NETcorerc2中禁用浏览器缓存?【英文标题】:HowtodisablebrowsercacheinASP.NETcorerc2?【发布时间】:2016-07-0618:56:12【问题描述】:我尝试了这个中间件,但浏览器仍在保存文件。我希望用户始终获得最新版本的js和css文件。pub... 查看详情

如何在 ASP.NET Core(.NET 6、VS 2022)中禁用浏览器链接

】如何在ASP.NETCore(.NET6、VS2022)中禁用浏览器链接【英文标题】:HowtodisableBrowserLinkinASP.NETCore(.NET6,VS2022)【发布时间】:2021-12-2508:42:30【问题描述】:我已禁用VisualStudio2022中的浏览器链接,并且我还禁用了所有热重载功能。即... 查看详情

为 asp.net 网站缓存大对象

】为asp.net网站缓存大对象【英文标题】:Cachinglargeobjectsforasp.netwebsite【发布时间】:2012-04-0812:27:20【问题描述】:我们通过查询我们的sql服务器以获取以xml形式返回的数据,然后使用xslt处理以创建最终输出,从而在我们的Web应... 查看详情

强制客户端浏览器重新下载我们的 asp.net Web 应用程序的 .css 和 .js 文件的优雅方式(不完全禁用缓存)

】强制客户端浏览器重新下载我们的asp.netWeb应用程序的.css和.js文件的优雅方式(不完全禁用缓存)【英文标题】:Elegantwaytoforceclientbrowserstore-downloadourasp.netwebapp\'s.cssand.jsfiles(withouttotallydisablingcaching)【发布时间】:2013-07-1116:47:2... 查看详情

如何在 ASP.NET 中禁用 RSS

】如何在ASP.NET中禁用RSS【英文标题】:HowtodisableRSSinASP.NET【发布时间】:2013-03-1402:20:02【问题描述】:我的网站是一个模板,它有web.config。如何在此网页中禁用其RSS我正在使用供应商的网站,当我阅读评论时,我发现web.config只... 查看详情

如何清除asp.net中的服务器缓存?

...】:2013-05-0801:59:12【问题描述】:我发现有两种缓存。有浏览器缓存和服务器缓存。我已经进行了一些搜索,但我还没有找到使用asp.net(或不使用)清除服务器缓存的清晰分步指南。(更新)我刚刚了解到,它的代码隐藏在VB-Vi... 查看详情

如何禁用 ASP.NET 中某些控件的 UpdateProgress?

】如何禁用ASP.NET中某些控件的UpdateProgress?【英文标题】:HowtodisableUpdateProgressforcertaincontrolsinASP.NET?【发布时间】:2015-11-1207:16:31【问题描述】:我有一个使用ASP.NET开发的网站。那里发生了很多ajax请求。所以我想在发生ajax请求... 查看详情

ASP.NET 应用程序中的浏览器缓存

】ASP.NET应用程序中的浏览器缓存【英文标题】:BrowserCachinginASP.NETapplication【发布时间】:2010-10-3115:29:07【问题描述】:关于如何在asp.net应用程序中进行浏览器缓存的任何建议。我在网上找到了一些不同的方法,但不确定哪种方... 查看详情

ASP.NET 网站在部署时看起来不同

...网页设计和ASP.NET的乐趣,以及试图让事物在IE和所有其他浏览器中以相同方式显示的噩梦。我在VS2010中工作并使用IE 查看详情

如何将 slug 添加到 asp.net 核心网站中的所有链接生成?

】如何将slug添加到asp.net核心网站中的所有链接生成?【英文标题】:HowtoaddtheslugtoallLinkgenerationinanasp.netcorewebsite?【发布时间】:2019-07-1019:11:18【问题描述】:我需要能够控制由我的Url.Content("~")调用生成的链接,以便能... 查看详情

ASP.NET 和输出缓存 - 如何查看它是不是正常工作?

】ASP.NET和输出缓存-如何查看它是不是正常工作?【英文标题】:ASP.NETandtheOutputCache-howcanseeifit\'sworking?ASP.NET和输出缓存-如何查看它是否正常工作?【发布时间】:2009-10-0411:50:25【问题描述】:问题:我有一个ASP.NET网站,但我认... 查看详情

如何禁用 WordPress 网站的浏览器阅读器视图

】如何禁用WordPress网站的浏览器阅读器视图【英文标题】:HowtoDisableBrowserReaderviewforWordPresssite【发布时间】:2021-10-2903:35:54【问题描述】:我想在我的wordpress网站中为所有用户禁用浏览器阅读器视图。我怎样才能做到这一点。/... 查看详情

html禁用所有浏览器(据称)的html页面缓存。(代码片段)

查看详情

如何在 KeyCloak 中禁用所有形式的本地缓存?

】如何在KeyCloak中禁用所有形式的本地缓存?【英文标题】:HowtodisableallformsoflocalcachinginKeyCloak?【发布时间】:2020-10-0709:59:53【问题描述】:官方文档指定了如何禁用领域和用户缓存,但是如何禁用standalone.xml中的infinispan中提到... 查看详情

ASP.NET 缓存添加与插入

】ASP.NET缓存添加与插入【英文标题】:ASP.NETcacheaddvsinsert【发布时间】:2011-09-2301:11:09【问题描述】:Cache.Add()和Cache.Insert()方法有什么区别?我应该在哪些情况下使用它们?【问题讨论】:【参考方案1】:Insert将使用相同的Key... 查看详情

如何将任何子域请求重定向到asp.net中的主域

...访问网站的所有部分,例如,如果用户直接输入以下地址浏览器:subdomain.doma 查看详情

如何在禁用的 asp.net 下拉列表中添加警报?

】如何在禁用的asp.net下拉列表中添加警报?【英文标题】:Howtoaddalertondisabledasp.netdrop-down?【发布时间】:2020-03-2117:49:06【问题描述】:我有一个这样的下拉菜单:<asp:DropDownListID="cboJPRem"class="jprem"runat="server"><asp:ListItemValue... 查看详情

如何确定 ASP.Net 缓存的总大小?

】如何确定ASP.Net缓存的总大小?【英文标题】:HowtodeterminetotalsizeofASP.Netcache?【发布时间】:2010-09-2513:04:39【问题描述】:我在一个Web项目中使用ASP.net缓存,我正在为它编写一个“状态”页面,它显示缓存中的项目,以及我能... 查看详情