ResponseCache:.net 5或.net Core 1.0的GetVaryByCustomString?

时间:2016-05-06 12:45:33

标签: asp.net-mvc asp.net-core outputcache responsecache

我正在尝试弄清楚如何为asp.net core 1.0实现GetVaryByCustomString函数。

您是否为asp.net core 1.0实现了这种功能?

由于

1 个答案:

答案 0 :(得分:0)

在我提出这个问题之后,突然想到使用中间件,我已经实现了如下课程:

public class OutputCacheHeaderMiddleware
    {
        private readonly RequestDelegate _next;

        public OutputCacheHeaderMiddleware(RequestDelegate next)
        {
            _next = next;
        }

        public async Task Invoke(HttpContext context)
        {
            var user = UserHelper.GetUser(context);

            if (user?.UserInfos != null)
            {
                var key = "user_1_a_" + string.Join(",", user.UserInfos.Select(u => u.Id));
                context.Request.Headers.Add("dt-cache-user", key);
            }   


            await _next.Invoke(context);

        }
    }

然后,它有扩展方法:

public static class OutputCacheHeaderExtensions
    {
        public static IApplicationBuilder UseOutputCacheHeader(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<OutputCacheHeaderMiddleware>();
        }
    }

在Startup.cs配置方法中,我添加了app.UseOutputCacheHeader();

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {

            app.UseOutputCacheHeader();

            app.UseIISPlatformHandler();
            app.UseStaticFiles();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }

和控制器:

[ResponseCache(VaryByHeader = "dt-cache-user", Duration = 6000)]
public IActionResult Index()
{
   return View();
}

毕竟,当我调试它时,我可以看到有一个标题&#34; dt-cache-user&#34;具有适当的值,但ResponseCache不起作用。每当我点击F5刷新页面时,它总是点击调试点。

它可能不起作用的原因是什么?

感谢。