From 671590b071cccfb889e68c3f74581fcf15a02921 Mon Sep 17 00:00:00 2001 From: crupest Date: Fri, 13 Mar 2020 17:58:32 +0800 Subject: Add cache for timeline post data. --- Timeline/Helpers/DataCacheHelper.cs | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'Timeline/Helpers/DataCacheHelper.cs') diff --git a/Timeline/Helpers/DataCacheHelper.cs b/Timeline/Helpers/DataCacheHelper.cs index c13aaddb..574d90b4 100644 --- a/Timeline/Helpers/DataCacheHelper.cs +++ b/Timeline/Helpers/DataCacheHelper.cs @@ -66,11 +66,25 @@ namespace Timeline.Helpers public static class DataCacheHelper { - public static async Task GenerateActionResult(Controller controller, ICacheableDataProvider provider) + public static async Task GenerateActionResult(Controller controller, ICacheableDataProvider provider, TimeSpan? maxAge = null) { + const string CacheControlHeaderKey = "Cache-Control"; const string IfNonMatchHeaderKey = "If-None-Match"; const string ETagHeaderKey = "ETag"; + string GenerateCacheControlHeaderValue() + { + var cacheControlHeader = new CacheControlHeaderValue() + { + NoCache = true, + NoStore = false, + MaxAge = maxAge ?? TimeSpan.FromDays(14), + Private = true, + MustRevalidate = true + }; + return cacheControlHeader.ToString(); + } + var loggerFactory = controller.HttpContext.RequestServices.GetRequiredService(); var logger = loggerFactory.CreateLogger(typeof(DataCacheHelper)); @@ -89,20 +103,23 @@ namespace Timeline.Helpers if (eTagList.FirstOrDefault(e => e.Equals(eTag)) != null) { - controller.Response.Headers.Add(ETagHeaderKey, eTagValue); logger.LogInformation(LogResultNotModified); + controller.Response.Headers.Add(ETagHeaderKey, eTagValue); + controller.Response.Headers.Add(CacheControlHeaderKey, GenerateCacheControlHeaderValue()); + return controller.StatusCode(StatusCodes.Status304NotModified); } } var data = await provider.GetData(); logger.LogInformation(LogResultData); + controller.Response.Headers.Add(CacheControlHeaderKey, GenerateCacheControlHeaderValue()); return controller.File(data.Data, data.Type, data.LastModified, eTag); } - public static Task GenerateActionResult(Controller controller, Func> getDataETagDelegate, Func> getDataDelegate) + public static Task GenerateActionResult(Controller controller, Func> getDataETagDelegate, Func> getDataDelegate, TimeSpan? maxAge = null) { - return GenerateActionResult(controller, new DelegateCacheableDataProvider(getDataETagDelegate, getDataDelegate)); + return GenerateActionResult(controller, new DelegateCacheableDataProvider(getDataETagDelegate, getDataDelegate), maxAge); } } } -- cgit v1.2.3