From 8bd1d1346c17a990d2607ed882f2311b8ca4170c Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 4 Apr 2025 11:17:16 +0800 Subject: [PATCH] Try to get and change tenant in `DynamicRouteValueTransformer`. --- .../CmsKitHomePageRouteValueTransformer.cs | 15 ++++--- .../Pages/CmsKitPageRouteValueTransformer.cs | 16 +++++--- .../CmsKitDynamicRouteValueTransformerBase.cs | 41 +++++++++++++++++++ 3 files changed, 62 insertions(+), 10 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKitDynamicRouteValueTransformerBase.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKitHomePageRouteValueTransformer.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKitHomePageRouteValueTransformer.cs index 3ac271938b..5ae76a364e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKitHomePageRouteValueTransformer.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKitHomePageRouteValueTransformer.cs @@ -1,27 +1,32 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc.Routing; using Microsoft.AspNetCore.Routing; -using Volo.Abp.DependencyInjection; using Volo.Abp.Features; +using Volo.Abp.MultiTenancy; using Volo.CmsKit.Features; using Volo.CmsKit.Public.Pages; +using Volo.CmsKit.Public.Web.Pages.Public; namespace Volo.CmsKit.Public.Web.Pages; -public class CmsKitHomePageRouteValueTransformer : DynamicRouteValueTransformer, ITransientDependency +public class CmsKitHomePageRouteValueTransformer : CmsKitDynamicRouteValueTransformerBase { protected IFeatureChecker FeatureChecker { get; } protected IPagePublicAppService PagePublicAppService { get; } - public CmsKitHomePageRouteValueTransformer(IFeatureChecker featureChecker, IPagePublicAppService pagePublicAppService) + public CmsKitHomePageRouteValueTransformer( + ICurrentTenant currentTenant, + ITenantConfigurationProvider tenantConfigurationProvider, + IFeatureChecker featureChecker, + IPagePublicAppService pagePublicAppService) + : base(currentTenant, tenantConfigurationProvider) { FeatureChecker = featureChecker; PagePublicAppService = pagePublicAppService; } - public override async ValueTask TransformAsync(HttpContext httpContext, RouteValueDictionary values) + protected async override ValueTask DoTransformAsync(HttpContext httpContext, RouteValueDictionary values) { if (await FeatureChecker.IsEnabledAsync(CmsKitFeatures.PageEnable)) { 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 53f7fe50ba..996a449489 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 @@ -1,30 +1,36 @@ using System.Threading.Tasks; 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.Abp.MultiTenancy; using Volo.CmsKit.Features; using Volo.CmsKit.Pages; using Volo.CmsKit.Public.Pages; +using Volo.CmsKit.Public.Web.Pages.Public; namespace Volo.CmsKit.Public.Web.Pages; -public class CmsKitPageRouteValueTransformer : DynamicRouteValueTransformer, ITransientDependency +public class CmsKitPageRouteValueTransformer : CmsKitDynamicRouteValueTransformerBase { protected IFeatureChecker FeatureChecker { get; } protected IPagePublicAppService PagePublicAppService { get; } protected IDistributedCache PageCache { get; } - public CmsKitPageRouteValueTransformer(IFeatureChecker featureChecker, IPagePublicAppService pagePublicAppService, IDistributedCache pageCache) + public CmsKitPageRouteValueTransformer( + ICurrentTenant currentTenant, + ITenantConfigurationProvider tenantConfigurationProvider, + IFeatureChecker featureChecker, + IPagePublicAppService pagePublicAppService, + IDistributedCache pageCache) + : base(currentTenant, tenantConfigurationProvider) { FeatureChecker = featureChecker; PagePublicAppService = pagePublicAppService; PageCache = pageCache; } - public async override ValueTask TransformAsync(HttpContext httpContext, RouteValueDictionary values) + protected async override ValueTask DoTransformAsync(HttpContext httpContext, RouteValueDictionary values) { if (values.TryGetValue("slug", out var slugParameter) && slugParameter is not null) { diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKitDynamicRouteValueTransformerBase.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKitDynamicRouteValueTransformerBase.cs new file mode 100644 index 0000000000..04fccd6473 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKitDynamicRouteValueTransformerBase.cs @@ -0,0 +1,41 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc.Routing; +using Microsoft.AspNetCore.Routing; +using Volo.Abp.DependencyInjection; +using Volo.Abp.MultiTenancy; + +namespace Volo.CmsKit.Public.Web.Pages.Public; + +public abstract class CmsKitDynamicRouteValueTransformerBase : DynamicRouteValueTransformer, ITransientDependency +{ + protected ICurrentTenant CurrentTenant { get; } + protected ITenantConfigurationProvider TenantConfigurationProvider { get; } + + protected CmsKitDynamicRouteValueTransformerBase(ICurrentTenant currentTenant, ITenantConfigurationProvider tenantConfigurationProvider) + { + CurrentTenant = currentTenant; + TenantConfigurationProvider = tenantConfigurationProvider; + } + + public async override ValueTask TransformAsync(HttpContext httpContext, RouteValueDictionary values) + { + TenantConfiguration tenant = null; + try + { + tenant = await TenantConfigurationProvider.GetAsync(saveResolveResult: false); + } + catch (Exception) + { + //Ignore + } + + using (CurrentTenant.Change(tenant?.Id, tenant?.Name)) + { + return await DoTransformAsync(httpContext, values); + } + } + + protected abstract ValueTask DoTransformAsync(HttpContext httpContext, RouteValueDictionary values); +}