diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs index 69788463e2..1579a0e570 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs @@ -16,11 +16,5 @@ public static class PageConsts public static int MaxStyleLength { get; set; } = int.MaxValue; - public static string DefaultHomePageCacheKey { get; set; } = "DefaultHomePage"; - - private static string _urlPrefix = "/"; - public static string UrlPrefix { - get => _urlPrefix; - set => _urlPrefix = value.EnsureEndsWith('/').EnsureStartsWith('/'); - } + public static string DefaultHomePageCacheKey { get; set; } = "CmsKit_DefaultHomePage"; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItemManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItemManager.cs index 16fbbbdb8e..4f97e5f112 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItemManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItemManager.cs @@ -22,7 +22,7 @@ public class MenuItemManager : CmsKitDomainServiceBase public virtual void SetPageUrl(MenuItem menuItem, Page page) { menuItem.SetPageId(page.Id); - menuItem.SetUrl(PageConsts.UrlPrefix + page.Slug); + menuItem.SetUrl(page.Slug); } [UnitOfWork] diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPagesMiddlewareExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPagesMiddlewareExtensions.cs new file mode 100644 index 0000000000..e8001edceb --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPagesMiddlewareExtensions.cs @@ -0,0 +1,18 @@ +using Microsoft.AspNetCore.Builder; +using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.GlobalFeatures; + +namespace Volo.CmsKit.Public.Web; + +public static class CmsKitPagesMiddlewareExtensions +{ + public static IApplicationBuilder UseHomePageDefaultMiddleware(this IApplicationBuilder builder) + { + return builder.UseMiddleware(); + } + + public static IApplicationBuilder UseCmsKitPagesMiddleware(this IApplicationBuilder builder) + { + return builder.UseMiddleware(); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs index 4121999f91..5193dde4d8 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs @@ -90,7 +90,10 @@ public class CmsKitPublicWebModule : AbpModule { Configure(options => { - options.Conventions.AddPageRoute("/Public/CmsKit/Pages/Index", PageConsts.UrlPrefix + "{slug:minlength(1)}"); + /* + * '/pages/{slug}' is for backward compatibility. It still works but simple /{slug} is works at the same time. + */ + options.Conventions.AddPageRoute("/Public/CmsKit/Pages/Index", "/pages/{slug:minlength(1)}"); options.Conventions.AddPageRoute("/Public/CmsKit/Blogs/Index", @"/blogs/{blogSlug:minlength(1)}"); options.Conventions.AddPageRoute("/Public/CmsKit/Blogs/BlogPost", @"/blogs/{blogSlug}/{blogPostSlug:minlength(1)}"); }); @@ -120,6 +123,7 @@ public class CmsKitPublicWebModule : AbpModule if (GlobalFeatureManager.Instance.IsEnabled()) { app.UseHomePageDefaultMiddleware(); + app.UseCmsKitPagesMiddleware(); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/DefaultHomePageMiddleware.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/DefaultHomePageMiddleware.cs index 752e5f2f42..44ddc3dd2c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/DefaultHomePageMiddleware.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/DefaultHomePageMiddleware.cs @@ -13,10 +13,9 @@ public class DefaultHomePageMiddleware : IMiddleware, ITransientDependency { public async Task InvokeAsync(HttpContext context, RequestDelegate next) { - var featureChecker = context.RequestServices.GetRequiredService(); - if (context.Request.Path.Value == "/") { + var featureChecker = context.RequestServices.GetRequiredService(); if (await featureChecker.IsEnabledAsync(CmsKitFeatures.PageEnable)) { var pagePublicAppService = context.RequestServices.GetRequiredService(); @@ -24,7 +23,7 @@ public class DefaultHomePageMiddleware : IMiddleware, ITransientDependency var page = await pagePublicAppService.FindDefaultHomePageAsync(); if (page != null) { - context.Request.Path = $"{PageConsts.UrlPrefix}{page.Slug}"; + context.Request.Path = $"/pages/{page.Slug}"; } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/HomePageDefaultMiddlewareExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/HomePageDefaultMiddlewareExtensions.cs deleted file mode 100644 index c5a2d8516f..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/HomePageDefaultMiddlewareExtensions.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Microsoft.AspNetCore.Builder; - -namespace Volo.CmsKit.Public.Web; - -public static class HomePageDefaultMiddlewareExtensions -{ - public static IApplicationBuilder UseHomePageDefaultMiddleware(this IApplicationBuilder builder) - { - return builder.UseMiddleware(); - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/PageRoutingMiddleware.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/PageRoutingMiddleware.cs new file mode 100644 index 0000000000..2298f5a1d7 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/PageRoutingMiddleware.cs @@ -0,0 +1,39 @@ +using System.Net; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Features; +using Volo.CmsKit.Features; +using Volo.CmsKit.Public.Pages; + +namespace Volo.CmsKit.Public.Web; + +public class PageRoutingMiddleware : IMiddleware, ITransientDependency +{ + public async Task InvokeAsync(HttpContext context, RequestDelegate next) + { + await next(context); + + if (context.Response.StatusCode == (int)HttpStatusCode.NotFound) + { + var featureChecker = context.RequestServices.GetRequiredService(); + if (!await featureChecker.IsEnabledAsync(CmsKitFeatures.PageEnable)) + { + return; + } + + var pagePublicAppService = context.RequestServices.GetRequiredService(); + + var page = await pagePublicAppService.FindBySlugAsync( + context.Request.Path.ToString().TrimStart('/')); + + if (page is not null) + { + context.Request.Path = $"/pages/{page.Slug}"; + + await next(context); + } + } + } +}