From 24b0f91d5bd87868658efaed194b1d7fc707eb65 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 6 Feb 2025 16:29:21 +0800 Subject: [PATCH] Add DocumentLinksNormalizer --- modules/docs/src/Volo.Docs.Web/DocsUiOptions.cs | 10 ++++++++++ .../Volo.Docs.Web/Utils/DefaultDocsLinkGenerator.cs | 9 +++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Web/DocsUiOptions.cs b/modules/docs/src/Volo.Docs.Web/DocsUiOptions.cs index e06fa94bc2..a6b06768c3 100644 --- a/modules/docs/src/Volo.Docs.Web/DocsUiOptions.cs +++ b/modules/docs/src/Volo.Docs.Web/DocsUiOptions.cs @@ -38,6 +38,16 @@ namespace Volo.Docs public SingleProjectModeOptions SingleProjectMode { get; } = new (); public bool EnableEnlargeImage { get; set; } = true; + + public Func DocumentLinksNormalizer { get; set; } = link => + { + if (!link.EndsWith("/Index", StringComparison.OrdinalIgnoreCase)) + { + return link; + + } + return link.Substring(0, link.LastIndexOf("/Index", StringComparison.OrdinalIgnoreCase)); + }; public Func RedirectUrlResolver { get; set; } = url => { diff --git a/modules/docs/src/Volo.Docs.Web/Utils/DefaultDocsLinkGenerator.cs b/modules/docs/src/Volo.Docs.Web/Utils/DefaultDocsLinkGenerator.cs index bc91e17848..c3934ec16f 100644 --- a/modules/docs/src/Volo.Docs.Web/Utils/DefaultDocsLinkGenerator.cs +++ b/modules/docs/src/Volo.Docs.Web/Utils/DefaultDocsLinkGenerator.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Net; using Microsoft.AspNetCore.Routing; +using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; using Volo.Docs.Pages.Documents.Project; @@ -9,10 +10,13 @@ namespace Volo.Docs.Utils; public class DefaultDocsLinkGenerator : IDocsLinkGenerator, ITransientDependency { protected LinkGenerator LinkGenerator { get; } + + protected IOptions DocsUiOptions { get; } - public DefaultDocsLinkGenerator(LinkGenerator linkGenerator) + public DefaultDocsLinkGenerator(LinkGenerator linkGenerator, IOptions docsUiOptions) { LinkGenerator = linkGenerator; + DocsUiOptions = docsUiOptions; } @@ -26,6 +30,7 @@ public class DefaultDocsLinkGenerator : IDocsLinkGenerator, ITransientDependency }; var encodedUrl = LinkGenerator.GetPathByPage("/Documents/Project/Index", values: routeValues); - return encodedUrl?.Replace("%2F", "/"); //Document name can contain path separator(/), so we need to decode it. + var url = encodedUrl?.Replace("%2F", "/"); //Document name can contain path separator(/), so we need to decode it. + return DocsUiOptions.Value.DocumentLinksNormalizer?.Invoke(url); } } \ No newline at end of file