diff --git a/modules/docs/app/VoloDocs.Web/Pages/Index.cshtml.cs b/modules/docs/app/VoloDocs.Web/Pages/Index.cshtml.cs index 3c3d0ca38a..ccb8cce083 100644 --- a/modules/docs/app/VoloDocs.Web/Pages/Index.cshtml.cs +++ b/modules/docs/app/VoloDocs.Web/Pages/Index.cshtml.cs @@ -1,22 +1,22 @@ -using System.Collections.Generic; -using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.Extensions.Options; using Volo.Docs; -using Volo.Docs.Projects; namespace VoloDocs.Web.Pages { public class IndexModel : PageModel { + private readonly DocsUrlOptions _urlOptions; - public IndexModel() + public IndexModel(IOptions urlOptions) { - + _urlOptions = urlOptions.Value; } public IActionResult OnGet() { + //TODO: Create HomeController & Index instead of Page. Otherwise, we have an empty Index.cshtml file. return Redirect("./documents"); } } diff --git a/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs b/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs index cc018ddcc1..2ae41455fe 100644 --- a/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs +++ b/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs @@ -62,6 +62,11 @@ namespace VoloDocs.Web var hostingEnvironment = context.Services.GetHostingEnvironment(); var configuration = context.Services.GetConfiguration(); + Configure(options => + { + options.RoutePrefix = null; + }); + Configure(options => { options.ConnectionStrings.Default = configuration["ConnectionString"]; diff --git a/modules/docs/src/Volo.Docs.HttpApi/Volo/Docs/Projects/DocsProjectController.cs b/modules/docs/src/Volo.Docs.HttpApi/Volo/Docs/Projects/DocsProjectController.cs index 3ea8c312f2..039f13a44e 100644 --- a/modules/docs/src/Volo.Docs.HttpApi/Volo/Docs/Projects/DocsProjectController.cs +++ b/modules/docs/src/Volo.Docs.HttpApi/Volo/Docs/Projects/DocsProjectController.cs @@ -1,5 +1,4 @@ -using System; -using System.Threading.Tasks; +using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp; using Volo.Abp.Application.Dtos; diff --git a/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs b/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs index bcf22f441e..af08393bad 100644 --- a/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs +++ b/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs @@ -2,8 +2,7 @@ using System.Linq; using System.Text; using Microsoft.AspNetCore.Razor.TagHelpers; -using Microsoft.Extensions.Configuration; -using Volo.Abp.Configuration; +using Microsoft.Extensions.Options; using Volo.Docs.Documents; using Volo.Docs.Utils; @@ -14,7 +13,7 @@ namespace Volo.Docs.Areas.Documents.TagHelpers [HtmlTargetElement("ul", Attributes = "root-node")] public class TreeTagHelper : TagHelper { - private readonly IConfigurationRoot _configuration; + private readonly DocsUrlOptions _urlOptions; private const string LiItemTemplateWithLink = @"
  • {2}{3}
  • "; @@ -42,9 +41,9 @@ namespace Volo.Docs.Areas.Documents.TagHelpers [HtmlAttributeName("language")] public string LanguageCode { get; set; } - public TreeTagHelper(IConfigurationAccessor configurationAccessor) + public TreeTagHelper(IOptions urlOptions) { - _configuration = configurationAccessor.Configuration; + _urlOptions = urlOptions.Value; } public override void Process(TagHelperContext context, TagHelperOutput output) @@ -143,7 +142,9 @@ namespace Volo.Docs.Areas.Documents.TagHelpers return "javascript:;"; } - var prefix = Convert.ToBoolean(_configuration["IncludeDocumentPrefixInUrl"]) ? "documents/" : ""; + var prefix = _urlOptions.RoutePrefix.IsNullOrEmpty() + ? "" + : _urlOptions.RoutePrefix.EnsureEndsWith('/'); return "/" + prefix + LanguageCode + "/" + ProjectName + "/" + Version + "/" + pathWithoutFileExtension; } diff --git a/modules/docs/src/Volo.Docs.Web/DocsUrlOptions.cs b/modules/docs/src/Volo.Docs.Web/DocsUrlOptions.cs new file mode 100644 index 0000000000..739d8b0eac --- /dev/null +++ b/modules/docs/src/Volo.Docs.Web/DocsUrlOptions.cs @@ -0,0 +1,10 @@ +namespace Volo.Docs +{ + public class DocsUrlOptions + { + /// + /// Default value: "documents"; + /// + public string RoutePrefix { get; set; } = "documents"; + } +} diff --git a/modules/docs/src/Volo.Docs.Web/DocsWebModule.cs b/modules/docs/src/Volo.Docs.Web/DocsWebModule.cs index d53536b809..7f901ad0da 100644 --- a/modules/docs/src/Volo.Docs.Web/DocsWebModule.cs +++ b/modules/docs/src/Volo.Docs.Web/DocsWebModule.cs @@ -1,6 +1,7 @@ using System; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; using Volo.Abp.AspNetCore.Mvc.UI.Bundling; @@ -40,11 +41,17 @@ namespace Volo.Docs Configure(options => { - var prefix = Convert.ToBoolean(configuration["IncludeDocumentPrefixInUrl"]) ? "documents/" : ""; + var urlOptions = context.Services + .GetRequiredServiceLazy>() + .Value; - options.Conventions.AddPageRoute("/Documents/Project/Index", prefix + "{projectName}"); - options.Conventions.AddPageRoute("/Documents/Project/Index", prefix + "{languageCode}/{projectName}"); - options.Conventions.AddPageRoute("/Documents/Project/Index", prefix + "{languageCode}/{projectName}/{version}/{*documentName}"); + var routePrefix = urlOptions.Value.RoutePrefix.IsNullOrEmpty() + ? "" + : urlOptions.Value.RoutePrefix.EnsureEndsWith('/'); + + options.Conventions.AddPageRoute("/Documents/Project/Index", routePrefix + "{projectName}"); + options.Conventions.AddPageRoute("/Documents/Project/Index", routePrefix + "{languageCode}/{projectName}"); + options.Conventions.AddPageRoute("/Documents/Project/Index", routePrefix + "{languageCode}/{projectName}/{version}/{*documentName}"); }); Configure(options => diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Index.cshtml.cs b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Index.cshtml.cs index dee88226bb..bc52df6ea9 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Index.cshtml.cs +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Index.cshtml.cs @@ -3,8 +3,7 @@ using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.Extensions.Configuration; -using Volo.Abp.Configuration; +using Microsoft.Extensions.Options; using Volo.Docs.Projects; namespace Volo.Docs.Pages.Documents @@ -16,17 +15,21 @@ namespace Volo.Docs.Pages.Documents public IReadOnlyList Projects { get; set; } private readonly IProjectAppService _projectAppService; - private readonly IConfigurationRoot _configuration; + private readonly DocsUrlOptions _urlOptions; - public IndexModel(IProjectAppService projectAppService, IConfigurationAccessor configurationAccessor) + public IndexModel( + IProjectAppService projectAppService, + IOptions urlOptions) { - _configuration = configurationAccessor.Configuration; _projectAppService = projectAppService; + _urlOptions = urlOptions.Value; } public async Task OnGetAsync() { - DocumentsUrlPrefix = Convert.ToBoolean(_configuration["IncludeDocumentPrefixInUrl"]) ? "documents/" : ""; + DocumentsUrlPrefix = _urlOptions.RoutePrefix.IsNullOrEmpty() + ? "" + : _urlOptions.RoutePrefix.EnsureEndsWith('/'); var listResult = await _projectAppService.GetListAsync(); diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs index 6732dd45fa..e02f61f11c 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs @@ -5,9 +5,9 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Options; using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; using Volo.Abp.Configuration; -using Volo.Abp.Localization; using Volo.Docs.Documents; using Volo.Docs.HtmlConverting; using Volo.Docs.Models; @@ -57,22 +57,27 @@ namespace Volo.Docs.Pages.Documents.Project private readonly IDocumentToHtmlConverterFactory _documentToHtmlConverterFactory; private readonly IProjectAppService _projectAppService; private readonly IConfigurationRoot _configuration; + private readonly DocsUrlOptions _options; public IndexModel( IDocumentAppService documentAppService, IDocumentToHtmlConverterFactory documentToHtmlConverterFactory, IProjectAppService projectAppService, - IConfigurationAccessor configurationAccessor) + IConfigurationAccessor configurationAccessor, + IOptions options) { _documentAppService = documentAppService; _documentToHtmlConverterFactory = documentToHtmlConverterFactory; _projectAppService = projectAppService; _configuration = configurationAccessor.Configuration; + _options = options.Value; } public async Task OnGetAsync() { - DocumentsUrlPrefix = Convert.ToBoolean(_configuration["IncludeDocumentPrefixInUrl"]) ? "documents/" : ""; + DocumentsUrlPrefix = _options.RoutePrefix.IsNullOrEmpty() + ? "" + : _options.RoutePrefix.EnsureEndsWith('/'); await SetProjectAsync(); await SetProjectsAsync(); @@ -234,7 +239,7 @@ namespace Volo.Docs.Pages.Documents.Project version = DocsAppConsts.Latest; } - var link = "/documents/" + LanguageCode + "/" + ProjectName + "/" + version; + var link = DocumentsUrlPrefix.EnsureStartsWith('/') + LanguageCode + "/" + ProjectName + "/" + version; if (documentName != null) {