Asp.Net Core 2.1+的视图缓存(响应缓存)

响应缓存Razor 页与 ASP.NET 核心 2.0 中不支持。 此功能将支持ASP.NET 核心 2.1 版本

在老的版本的MVC里面,有一种可以缓存视图的特性(OutputCache),可以保持同一个参数的请求,在N段时间内,直接从mvc的缓存中读取,不去走视图的逻辑。

    [OutputCache(Duration =20)]//设置过期时间为20秒
    public ActionResult ExampleCacheAction()
    {
        var  time=DateTime.Now.ToString("yyyy年MM月dd日 HH时mm分ss秒");
        ViewBag.time= time;
        return View();
    }  

在Asp.Net core 2.1中,官方文档上称:响应缓存可减少客户端或代理对 web 服务器的请求数。 响应缓存还可减少量工作的 web 服务器执行程序生成响应。 响应缓存由标头,指定你希望客户端、 代理和缓存响应的中间件如何控制。

在Asp.Net Core 2.1 中,没有了OutputCache,换成了ResponseCache,ResponseCache必须带一个参数:Duration 单位为秒,最少设置一秒钟

 [ResponseCache(Duration = 5)]
        public IActionResult About()
        {

            ViewBag.time = DateTime.Now.ToString("yyyy年MM月dd日 HH时mm分ss秒");

            return View();
        }

然后再浏览器请求这个视图

在浏览器的响应头的Cache-Control 中出现max-age=5, Http协议对此的解释是

客户端将不会接受其保留时间大于指定的秒数的响应。 示例: max-age=60 (60 秒), max-age=2592000 (1 个月)

如果在浏览器中禁用缓存,那么ResponseCache不会有任何效果



Vary过滤

[ResponseCache(VaryByHeader = "User-Agent", Duration = 5)]
        public IActionResult About()
        {

            ViewBag.time = DateTime.Now.ToString("yyyy年MM月dd日 HH时mm分ss秒");

            return View();
        }

关于vary在Http响应头的作用就是:告诉缓存服务器或者CDN,我还是同一个浏览器的请求,你给我缓存就行了,如果你换个浏览器去请求,那么vary的值肯定为空,那么缓存服务器就会认为你是一个新的请求,就会去读取最新的数据给浏览器

参考资料:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

 禁用缓存(NoStore 和 Location.None)

在Http中 :no-store,请求和响应的信息都不应该被存储在对方的磁盘系统中;

[ResponseCache(Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult About()
        {

            ViewBag.time = DateTime.Now.ToString("yyyy年MM月dd日 HH时mm分ss秒");

            return View();
        }

ResponseCacheLocation.None是在Cache-Control设置一个no-cache属性,让浏览器不缓存当前这个URL
缓存配置(CacheProfiles)

在一个正常的项目中,肯定有很多个控制器,但是不可能每个控制器的缓存策略都一样,这时候,我们就需要一个缓存的配置来灵活应对这个问题在mvc的服务注入的时候,我们可以在option里面注入进我们的缓存策略

services.AddMvc(option=> {
                option.CacheProfiles.Add("test1", new CacheProfile()
                {
                    Duration = 5
                });
                option.CacheProfiles.Add("test2", new CacheProfile()
                {
                    Location = ResponseCacheLocation.None,
                    NoStore = true
                });
            });

然后我们在使用的时候,直接使用配置策略的名称就好了

[ResponseCache(CacheProfileName = "test1")]
        public IActionResult About()
        {

            ViewBag.time = DateTime.Now.ToString("yyyy年MM月dd日 HH时mm分ss秒");

            return View();
        }

这样我们就能和之前在特性后边配置一样了,而且代码看起来也清爽了不少

总结:对于响应缓存,我个人的理解就是:MVC通过返回HTTP响应头,让浏览器在多少时间内,执行刷新操作的时候,不请求服务器,直接从缓存读取。。。

https://www.cnblogs.com/boxrice/p/8492508.html

原文地址:https://www.cnblogs.com/tianciliangen/p/8494308.html

时间: 2024-10-18 13:45:10

Asp.Net Core 2.1+的视图缓存(响应缓存)的相关文章

007.Adding a view to an ASP.NET Core MVC app -- 【在asp.net core mvc中添加视图】

Adding a view to an ASP.NET Core MVC app 在asp.net core mvc中添加视图 2017-3-4 7 分钟阅读时长 本文内容 1.Changing views and layout pages 修改视图和布局页 2.Change the title and menu link in the layout file 在布局文件中修改标题与菜单 3.Passing Data from the Controller to the View 从控制器向视图

ASP.NET Core中使用Razor视图引擎渲染视图为字符串

一.前言 在有些项目需求上或许需要根据模板生产静态页面,那么你一样可以用Razor语法去直接解析你的页面从而把解析的页面生成静态页,这样的使用场景很多,不限于生成静态页面,视图引擎为我们提供了模型到视图的代码或文本生成的能力. 本文章中采用的是ASP.NET Core MVC原生的方法:当然我在YOYOFx中也实现了这种视图引擎 ( https://github.com/maxzhang1985/YOYOFx/blob/master/AspNetCore/YOYO.AspNetCore.View

Asp.Net Core MVC控制器和视图之间传值

一.Core MVC中控制器和视图之间传值方式和Asp.Net中非常类似 1.弱类型数据:ViewData,ViewBag 2.强类型数据:@model 二.代码 实例  1.ViewData public IActionResult Index() { //测试的 时候在Cummuty2017的最新版中右键添加视图生成的 视图文件的编码 为ANSI对于中文显示乱码 //使用ViewData 实现 控制器 和 视图之间传值 /* * 1.ViewData指定键值对的方式设置或读取 数据 * 2.

在Asp.Net Core MVC 3.0 视图运行时编译

在正常情况下,视图在生成的时候就会变为 xxx.Views.dll,在开发的时候,这样很不方便,因为很多的时候,我们只是修改一个样式,调整一些JavaScript代码,这个时候要把项目调试暂停下来,生成之后在看页面效果. 先通过nuget 包控制台安装: Install-Package Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation -Version 3.0.0 然后在Startup.cs文件,在ConfigureServices函数中加入:

ASP.NET Core 自定义视图路径及主题切换

原文地址:https://www.cnblogs.com/ElderJames/p/Customized-View-Path-And-Theme-Switching-In-AspNetCore.html <ASP.NET Core 中的SEO优化(1):中间件实现服务端静态化缓存> <ASP.NET Core 中的SEO优化(2):中间件中渲染Razor视图> <ASP.NET Core 中的SEO优化(3):自定义路由匹配和生成> 0|1背景 切换主题,是博客.CMS

ASP.NET Core 缓存技术 及 Nginx 缓存配置

前言 在Asp.Net Core Nginx部署一文中,主要是讲述的如何利用Nginx来实现应用程序的部署,使用Nginx来部署主要有两大好处,第一是利用Nginx的负载均衡功能,第二是使用Nginx的反向代理来降低我们后端应用程序的压力.那除了以上两点之外,其实我们还可以利用代理服务器的缓存功能来进一步的降低后端应用程序的压力,提升系统的吞吐量(tps).这一篇就来看一下具体应该如何去做吧. 目录 WEB 缓存 ASP.NET Core 缓存 内存缓存 分布式缓存 Response 缓存 Ng

细说ASP.NET Core静态文件的缓存方式

2016-11-26 张磊 dotNET跨平台 一.前言 我们在优化Web服务的时候,对于静态的资源文件,通常都是通过客户端缓存.服务器缓存.CDN缓存,这三种方式来缓解客户端对于Web服务器的连接请求压力的. 本文指在这三个方面,在ASP.NET Core中静态文件的实现过程和使用方法进行阐述.当然也可以考虑使用反向代理的方式(例如IIS或Nginx),这些不是本文讨论的内容. 本文重点展示如何通过StaticFileMiddleware中间件,提高网站的性能.虽然这不是唯一缓存文件的方式,我

ASP.NET Core Razor 视图组件

视图组件简介 在新的ASP.NET Core MVC中,视图组件类似于局部视图,但它们更强大.视图组件不使用模型绑定,仅依赖于您在调用时提供的数据. 视图组件特性: 呈现页面响应的某一部分而不是整个响应 包括在控制器和视图之间发现的关注分离和可测试性优势 可以具有参数和业务逻辑 通常在页面布局中调用 视图组件是在任何地方可重用的呈现逻辑,对于局部视图来说相对复杂,例如: 动态导航菜单 标签云(查询数据库) 登录面板 购物车 最近发表的文章 典型博客上的侧边栏内容 将在每个页面上呈现的登录面板,并

ASP.NET Core 入门教程 7、ASP.NET Core MVC 分部视图入门

原文:ASP.NET Core 入门教程 7.ASP.NET Core MVC 分部视图入门 一.前言 1.本教程主要内容 ASP.NET Core MVC (Razor)分部视图简介 ASP.NET Core MVC (Razor)分部视图基础教程 ASP.NET Core MVC (Razor)强类型分部视图教程 2.本教程环境信息 软件/环境 说明 操作系统 Windows 10 SDK 2.1.401 ASP.NET Core 2.1.3 IDE Visual Studio Code 1