ResponseCache: GetVaryByCustomString для.net 5 или.net Core 1.0?

Я пытаюсь выяснить, как реализовать функцию GetVaryByCustomString для asp.net core 1.0.

Реализовали ли вы такую ​​функциональность для asp.net core 1.0?

Спасибо

1 ответ

После того, как я задаю этот вопрос, мне вдруг пришло в голову использование Middleware, и я реализовал класс, как показано ниже:

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 Configure метод, я добавил 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();
}

После всего этого, когда я отлаживаю его, я вижу, что есть заголовок "dt-cache-user" с правильным значением, но ResponseCache не работает. Каждый раз, когда я нажимаю клавишу F5, чтобы обновить страницу, она всегда попадает в точку отладки.

В чем может быть причина того, что это не работает?

Благодарю.

Другие вопросы по тегам