c# .net core 设置缓存

1、开启ResponseCaching的缓存(ResponseCaching相当于老版本的OutPutCache):

   在Startup.cs文件中设置:

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddResponseCaching();
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            app.UseResponseCaching();

  正常使用:

        [ResponseCache(Duration = 20)]
        public ActionResult GetHotel(HotelListRequest request)
        {

  设置ResponseCaching的策略,供多个Controller使用:

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

2、开启静态资源缓存:

  在Startup.cs文件中设置:

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            app.UseStaticFiles(new StaticFileOptions
            {
                OnPrepareResponse = ctx =>
                {
                    const int durationInSeconds = 60 * 60 * 24;
                    ctx.Context.Response.Headers[HeaderNames.CacheControl] = "public,max-age=" + durationInSeconds;
                }
            });

3、指定某个方法设置缓存,可以通过自定义过滤器实现:

  创建过滤器:

    public class NeedCacheAttribute : ActionFilterAttribute
    {
        public override void OnResultExecuting(ResultExecutingContext context)
        {
            base.OnResultExecuting(context);
            
            context.HttpContext.Response.Headers[HeaderNames.LastModified] = "2018-05-28 14:00:00";
            context.HttpContext.Response.Headers[HeaderNames.Expires] = "2018-05-28 16:00:00";

        }
    }

  使用:

        [NeedCache]
        public ActionResult GetHotel(HotelListRequest request)

4、方法中直接写代码实现:

HttpContext.Response.GetTypedHeaders().CacheControl = new CacheControlHeaderValue()
            {
                Public = true,
                MaxAge = TimeSpan.FromSeconds(20)
            };
            Response.Headers[HeaderNames.Vary] = new string[] { "Accept-Encoding" };

注意:1、以上方式是通过设置浏览器的过期时间实现缓存,此方式仅适用于Ajax请求且Get请求,Post请求和非Ajax请求暂不支持,目前测试结果是这样的。

猜你喜欢

转载自www.cnblogs.com/len0031/p/9100897.html