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 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";
}

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)
{
menuItem.SetPageId(page.Id);
menuItem.SetUrl(PageConsts.UrlPrefix + page.Slug);
menuItem.SetUrl(page.Slug);
}
[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 =>
{
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<PagesFeature>())
{
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)
{
var featureChecker = context.RequestServices.GetRequiredService<IFeatureChecker>();
if (context.Request.Path.Value == "/")
{
var featureChecker = context.RequestServices.GetRequiredService<IFeatureChecker>();
if (await featureChecker.IsEnabledAsync(CmsKitFeatures.PageEnable))
{
var pagePublicAppService = context.RequestServices.GetRequiredService<IPagePublicAppService>();
@ -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}";
}
}
}

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