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, чтобы обновить страницу, она всегда попадает в точку отладки.
В чем может быть причина того, что это не работает?
Благодарю.