From 6f1e2bdfe0cb30b1efe5743073d24cbf0a3aa7a0 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 28 Nov 2024 14:16:57 +0800 Subject: [PATCH] Check the cache to prevent remote calls. --- .../Volo/CmsKit/Pages/PageCacheItem.cs | 5 +++-- .../Pages/CmsKitPageRouteValueTransformer.cs | 17 +++++++++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) rename modules/cms-kit/src/{Volo.CmsKit.Domain => Volo.CmsKit.Domain.Shared}/Volo/CmsKit/Pages/PageCacheItem.cs (96%) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageCacheItem.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageCacheItem.cs similarity index 96% rename from modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageCacheItem.cs rename to modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageCacheItem.cs index d4f7925160..d4d662a8a6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageCacheItem.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageCacheItem.cs @@ -3,10 +3,11 @@ using Volo.Abp.ObjectExtending; namespace Volo.CmsKit.Pages; +[Serializable] public class PageCacheItem : ExtensibleObject { public Guid Id { get; set; } - + public string Title { get; set; } public string Slug { get; set; } @@ -23,4 +24,4 @@ public class PageCacheItem : ExtensibleObject { return $"CmsPage_{slug}"; } -} \ No newline at end of file +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKitPageRouteValueTransformer.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKitPageRouteValueTransformer.cs index d9bba6cd0b..53f7fe50ba 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKitPageRouteValueTransformer.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKitPageRouteValueTransformer.cs @@ -2,9 +2,11 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Routing; using Microsoft.AspNetCore.Routing; +using Volo.Abp.Caching; using Volo.Abp.DependencyInjection; using Volo.Abp.Features; using Volo.CmsKit.Features; +using Volo.CmsKit.Pages; using Volo.CmsKit.Public.Pages; namespace Volo.CmsKit.Public.Web.Pages; @@ -13,14 +15,16 @@ public class CmsKitPageRouteValueTransformer : DynamicRouteValueTransformer, ITr { protected IFeatureChecker FeatureChecker { get; } protected IPagePublicAppService PagePublicAppService { get; } + protected IDistributedCache PageCache { get; } - public CmsKitPageRouteValueTransformer(IFeatureChecker featureChecker, IPagePublicAppService pagePublicAppService) + public CmsKitPageRouteValueTransformer(IFeatureChecker featureChecker, IPagePublicAppService pagePublicAppService, IDistributedCache pageCache) { FeatureChecker = featureChecker; PagePublicAppService = pagePublicAppService; + PageCache = pageCache; } - public override async ValueTask TransformAsync(HttpContext httpContext, RouteValueDictionary values) + public async override ValueTask TransformAsync(HttpContext httpContext, RouteValueDictionary values) { if (values.TryGetValue("slug", out var slugParameter) && slugParameter is not null) { @@ -30,7 +34,12 @@ public class CmsKitPageRouteValueTransformer : DynamicRouteValueTransformer, ITr } var slug = slugParameter.ToString().TrimStart('/'); - var exist = await PagePublicAppService.DoesSlugExistAsync(slug); + + var exist = await PageCache.GetAsync(PageCacheItem.GetKey(slug)) != null; + if (!exist) + { + exist = await PagePublicAppService.DoesSlugExistAsync(slug); + } if (exist) { @@ -40,4 +49,4 @@ public class CmsKitPageRouteValueTransformer : DynamicRouteValueTransformer, ITr return values; } -} \ No newline at end of file +}