Browse Source

Handle CmsKit Pages in a Middleware

pull/17642/head
Enis Necipoglu 3 years ago
parent
commit
f7d3e8f8e6
No known key found for this signature in database GPG Key ID: 1EC55E13241E1680
  1. 8
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs
  2. 2
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItemManager.cs
  3. 18
      modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPagesMiddlewareExtensions.cs
  4. 6
      modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs
  5. 5
      modules/cms-kit/src/Volo.CmsKit.Public.Web/DefaultHomePageMiddleware.cs
  6. 11
      modules/cms-kit/src/Volo.CmsKit.Public.Web/HomePageDefaultMiddlewareExtensions.cs
  7. 39
      modules/cms-kit/src/Volo.CmsKit.Public.Web/PageRoutingMiddleware.cs

8
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 int MaxStyleLength { get; set; } = int.MaxValue;
public static string DefaultHomePageCacheKey { get; set; } = "DefaultHomePage"; public static string DefaultHomePageCacheKey { get; set; } = "CmsKit_DefaultHomePage";
private static string _urlPrefix = "/";
public static string UrlPrefix {
get => _urlPrefix;
set => _urlPrefix = value.EnsureEndsWith('/').EnsureStartsWith('/');
}
} }

2
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) public virtual void SetPageUrl(MenuItem menuItem, Page page)
{ {
menuItem.SetPageId(page.Id); menuItem.SetPageId(page.Id);
menuItem.SetUrl(PageConsts.UrlPrefix + page.Slug); menuItem.SetUrl(page.Slug);
} }
[UnitOfWork] [UnitOfWork]

18
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<DefaultHomePageMiddleware>();
}
public static IApplicationBuilder UseCmsKitPagesMiddleware(this IApplicationBuilder builder)
{
return builder.UseMiddleware<PageRoutingMiddleware>();
}
}

6
modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs

@ -90,7 +90,10 @@ public class CmsKitPublicWebModule : AbpModule
{ {
Configure<RazorPagesOptions>(options => Configure<RazorPagesOptions>(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/Index", @"/blogs/{blogSlug:minlength(1)}");
options.Conventions.AddPageRoute("/Public/CmsKit/Blogs/BlogPost", @"/blogs/{blogSlug}/{blogPostSlug: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<PagesFeature>()) if (GlobalFeatureManager.Instance.IsEnabled<PagesFeature>())
{ {
app.UseHomePageDefaultMiddleware(); app.UseHomePageDefaultMiddleware();
app.UseCmsKitPagesMiddleware();
} }
} }
} }

5
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) public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{ {
var featureChecker = context.RequestServices.GetRequiredService<IFeatureChecker>();
if (context.Request.Path.Value == "/") if (context.Request.Path.Value == "/")
{ {
var featureChecker = context.RequestServices.GetRequiredService<IFeatureChecker>();
if (await featureChecker.IsEnabledAsync(CmsKitFeatures.PageEnable)) if (await featureChecker.IsEnabledAsync(CmsKitFeatures.PageEnable))
{ {
var pagePublicAppService = context.RequestServices.GetRequiredService<IPagePublicAppService>(); var pagePublicAppService = context.RequestServices.GetRequiredService<IPagePublicAppService>();
@ -24,7 +23,7 @@ public class DefaultHomePageMiddleware : IMiddleware, ITransientDependency
var page = await pagePublicAppService.FindDefaultHomePageAsync(); var page = await pagePublicAppService.FindDefaultHomePageAsync();
if (page != null) if (page != null)
{ {
context.Request.Path = $"{PageConsts.UrlPrefix}{page.Slug}"; context.Request.Path = $"/pages/{page.Slug}";
} }
} }
} }

11
modules/cms-kit/src/Volo.CmsKit.Public.Web/HomePageDefaultMiddlewareExtensions.cs

@ -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<DefaultHomePageMiddleware>();
}
}

39
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<IFeatureChecker>();
if (!await featureChecker.IsEnabledAsync(CmsKitFeatures.PageEnable))
{
return;
}
var pagePublicAppService = context.RequestServices.GetRequiredService<IPagePublicAppService>();
var page = await pagePublicAppService.FindBySlugAsync(
context.Request.Path.ToString().TrimStart('/'));
if (page is not null)
{
context.Request.Path = $"/pages/{page.Slug}";
await next(context);
}
}
}
}
Loading…
Cancel
Save