1
我想弄清楚如何爲asp.net核心1.0實現GetVaryByCustomString函數。對於.net 5或.net Core 1.0,ResponseCache:GetVaryByCustomString?
您是否已經爲asp.net core 1.0實現了這種功能?
感謝
我想弄清楚如何爲asp.net核心1.0實現GetVaryByCustomString函數。對於.net 5或.net Core 1.0,ResponseCache:GetVaryByCustomString?
您是否已經爲asp.net core 1.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();
}
這一切後,當我調試它,我可以看到,有一個標題「DT-緩存用戶」用正確的值,但ResponseCache中不加工。每次我點擊F5刷新頁面時,總是碰到調試點。
它可能不起作用的原因是什麼?
謝謝。
響應緩存緩存取決於瀏覽器。例如,如果您手動刷新頁面,或者開發工具設置爲禁用緩存,Google Chrome會始終發送請求。嘗試點擊一次指向索引頁的鏈接。 –
我特別控制了「禁用Cahce」複選框,並且未選中。刷新和導航操作都不起作用。 –