mirror of https://github.com/abpframework/abp.git
9 changed files with 130 additions and 132 deletions
@ -0,0 +1,39 @@ |
|||||
|
using Microsoft.AspNetCore.Builder; |
||||
|
using Microsoft.AspNetCore.Routing; |
||||
|
using Volo.Abp.GlobalFeatures; |
||||
|
using Volo.CmsKit.GlobalFeatures; |
||||
|
using Volo.CmsKit.Public.Web.Pages; |
||||
|
|
||||
|
namespace Volo.CmsKit.Public.Web; |
||||
|
|
||||
|
public static class CmsKitPagesConfigurationExtensions |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// Maps CMS Kit to the routing.
|
||||
|
/// </summary>
|
||||
|
/// <param name="builder"></param>
|
||||
|
/// <param name="order">The matching order for the dynamic route. Lower is prior.</param>
|
||||
|
public static IEndpointRouteBuilder MapCmsPageRoute(this IEndpointRouteBuilder builder, int? order = null) |
||||
|
{ |
||||
|
if (!GlobalFeatureManager.Instance.IsEnabled<PagesFeature>()) |
||||
|
{ |
||||
|
return builder; |
||||
|
} |
||||
|
|
||||
|
builder |
||||
|
.MapDynamicPageRoute<CmsKitHomePageRouteValueTransformer>("/", state: null, order: int.MinValue); |
||||
|
|
||||
|
if (order is null) |
||||
|
{ |
||||
|
builder |
||||
|
.MapDynamicPageRoute<CmsKitPageRouteValueTransformer>("{**slug}"); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
builder |
||||
|
.MapDynamicPageRoute<CmsKitPageRouteValueTransformer>("{**slug}", state: default, order: order.Value); |
||||
|
} |
||||
|
|
||||
|
return builder; |
||||
|
} |
||||
|
} |
||||
@ -1,40 +0,0 @@ |
|||||
using System; |
|
||||
using System.Collections.Generic; |
|
||||
using Microsoft.AspNetCore.Builder; |
|
||||
using Volo.Abp.GlobalFeatures; |
|
||||
using Volo.CmsKit.GlobalFeatures; |
|
||||
|
|
||||
namespace Volo.CmsKit.Public.Web; |
|
||||
|
|
||||
public static class CmsKitPagesMiddlewareExtensions |
|
||||
{ |
|
||||
private const string UseCmsKitHomePageMiddlewareKey = "UseCmsKitHomePageMiddleware"; |
|
||||
|
|
||||
[Obsolete("Use UseCmsKitPagesMiddleware instead.")] |
|
||||
public static IApplicationBuilder UseCmsKitHomePageMiddleware(this IApplicationBuilder builder) |
|
||||
{ |
|
||||
if (!GlobalFeatureManager.Instance.IsEnabled<PagesFeature>()) |
|
||||
{ |
|
||||
return builder; |
|
||||
} |
|
||||
|
|
||||
builder.Properties[UseCmsKitHomePageMiddlewareKey] = true; |
|
||||
return builder.UseMiddleware<DefaultHomePageMiddleware>(); |
|
||||
} |
|
||||
|
|
||||
public static IApplicationBuilder UseCmsKitPagesMiddleware(this IApplicationBuilder builder) |
|
||||
{ |
|
||||
if (!GlobalFeatureManager.Instance.IsEnabled<PagesFeature>()) |
|
||||
{ |
|
||||
return builder; |
|
||||
} |
|
||||
|
|
||||
if (!builder.Properties.ContainsKey(UseCmsKitHomePageMiddlewareKey)) |
|
||||
{ |
|
||||
builder.Properties[UseCmsKitHomePageMiddlewareKey] = true; |
|
||||
builder.UseMiddleware<DefaultHomePageMiddleware>(); |
|
||||
} |
|
||||
|
|
||||
return builder.UseMiddleware<PageRoutingMiddleware>(); |
|
||||
} |
|
||||
} |
|
||||
@ -1,33 +0,0 @@ |
|||||
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.Pages; |
|
||||
using Volo.CmsKit.Public.Pages; |
|
||||
|
|
||||
namespace Volo.CmsKit.Public.Web; |
|
||||
|
|
||||
public class DefaultHomePageMiddleware : IMiddleware, ITransientDependency |
|
||||
{ |
|
||||
public virtual async Task InvokeAsync(HttpContext context, RequestDelegate next) |
|
||||
{ |
|
||||
if (context.Request.Path.Value == "/") |
|
||||
{ |
|
||||
var featureChecker = context.RequestServices.GetRequiredService<IFeatureChecker>(); |
|
||||
if (await featureChecker.IsEnabledAsync(CmsKitFeatures.PageEnable)) |
|
||||
{ |
|
||||
var pagePublicAppService = context.RequestServices.GetRequiredService<IPagePublicAppService>(); |
|
||||
|
|
||||
var page = await pagePublicAppService.FindDefaultHomePageAsync(); |
|
||||
if (page != null) |
|
||||
{ |
|
||||
context.Request.Path = $"/pages/{page.Slug}"; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
await next(context); |
|
||||
} |
|
||||
} |
|
||||
@ -1,39 +0,0 @@ |
|||||
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 virtual 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 slug = context.Request.Path.ToString().TrimStart('/'); |
|
||||
var exist = await pagePublicAppService.DoesSlugExistAsync(slug); |
|
||||
|
|
||||
if (exist) |
|
||||
{ |
|
||||
context.Request.Path = $"/pages/{slug}"; |
|
||||
|
|
||||
await next(context); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -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.Features; |
||||
|
using Volo.CmsKit.Features; |
||||
|
using Volo.CmsKit.Public.Pages; |
||||
|
|
||||
|
namespace Volo.CmsKit.Public.Web.Pages; |
||||
|
|
||||
|
public class CmsKitHomePageRouteValueTransformer : DynamicRouteValueTransformer, ITransientDependency |
||||
|
{ |
||||
|
protected IFeatureChecker FeatureChecker { get; } |
||||
|
|
||||
|
protected IPagePublicAppService PagePublicAppService { get; } |
||||
|
|
||||
|
public CmsKitHomePageRouteValueTransformer(IFeatureChecker featureChecker, IPagePublicAppService pagePublicAppService) |
||||
|
{ |
||||
|
FeatureChecker = featureChecker; |
||||
|
PagePublicAppService = pagePublicAppService; |
||||
|
} |
||||
|
|
||||
|
public override async ValueTask<RouteValueDictionary> TransformAsync(HttpContext httpContext, RouteValueDictionary values) |
||||
|
{ |
||||
|
if (await FeatureChecker.IsEnabledAsync(CmsKitFeatures.PageEnable)) |
||||
|
{ |
||||
|
var page = await PagePublicAppService.FindDefaultHomePageAsync(); |
||||
|
if (page != null) |
||||
|
{ |
||||
|
values = new RouteValueDictionary(); |
||||
|
|
||||
|
values["page"] = "/Public/CmsKit/Pages/Index"; |
||||
|
values["slug"] = page.Slug; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return values; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,43 @@ |
|||||
|
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.CmsKit.Features; |
||||
|
using Volo.CmsKit.Public.Pages; |
||||
|
|
||||
|
namespace Volo.CmsKit.Public.Web.Pages; |
||||
|
|
||||
|
public class CmsKitPageRouteValueTransformer : DynamicRouteValueTransformer, ITransientDependency |
||||
|
{ |
||||
|
protected IFeatureChecker FeatureChecker { get; } |
||||
|
protected IPagePublicAppService PagePublicAppService { get; } |
||||
|
|
||||
|
public CmsKitPageRouteValueTransformer(IFeatureChecker featureChecker, IPagePublicAppService pagePublicAppService) |
||||
|
{ |
||||
|
FeatureChecker = featureChecker; |
||||
|
PagePublicAppService = pagePublicAppService; |
||||
|
} |
||||
|
|
||||
|
public override async ValueTask<RouteValueDictionary> TransformAsync(HttpContext httpContext, RouteValueDictionary values) |
||||
|
{ |
||||
|
if (values.TryGetValue("slug", out var slugParameter) && slugParameter is not null) |
||||
|
{ |
||||
|
if (!await FeatureChecker.IsEnabledAsync(CmsKitFeatures.PageEnable)) |
||||
|
{ |
||||
|
return values; |
||||
|
} |
||||
|
|
||||
|
var slug = slugParameter.ToString().TrimStart('/'); |
||||
|
var exist = await PagePublicAppService.DoesSlugExistAsync(slug); |
||||
|
|
||||
|
if (exist) |
||||
|
{ |
||||
|
values["page"] = "/Public/CmsKit/Pages/Index"; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return values; |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue