diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs index c722529eca..f2570a5f84 100644 --- a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs +++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using JetBrains.Annotations; using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; using Volo.Abp.MultiTenancy; @@ -42,36 +43,24 @@ namespace Volo.Abp.UI.Navigation.Urls return Options.RedirectAllowedUrls.Any(url.StartsWith); } - protected virtual Task GetConfiguredUrl(string appName, string urlName) + protected virtual async Task GetConfiguredUrl(string appName, string urlName) { - var app = Options.Applications[appName]; - - if (urlName.IsNullOrEmpty()) + var url = await GetUrlOrDefaultAsync(appName, urlName); + if (!url.IsNullOrEmpty()) { - if (app.RootUrl.IsNullOrEmpty()) - { - throw new AbpException( - $"RootUrl for the application '{appName}' was not configured. Use {nameof(AppUrlOptions)} to configure it!" - ); - } - - return Task.FromResult(app.RootUrl); + return url; } - var url = app.Urls.GetOrDefault(urlName); - if (url.IsNullOrEmpty()) + if (!urlName.IsNullOrEmpty()) { throw new AbpException( $"Url, named '{urlName}', for the application '{appName}' was not configured. Use {nameof(AppUrlOptions)} to configure it!" ); } - if (app.RootUrl == null) - { - return Task.FromResult(url); - } - - return Task.FromResult(app.RootUrl.EnsureEndsWith('/') + url); + throw new AbpException( + $"RootUrl for the application '{appName}' was not configured. Use {nameof(AppUrlOptions)} to configure it!" + ); } protected virtual async Task ReplacePlaceHoldersAsync(string url) @@ -118,5 +107,24 @@ namespace Volo.Abp.UI.Navigation.Urls return CurrentTenant.Name; } + + public Task GetUrlOrDefaultAsync([NotNull] string appName, [CanBeNull] string urlName = null) + { + var app = Options.Applications[appName]; + + if (urlName.IsNullOrEmpty()) + { + return Task.FromResult(app.RootUrl); + } + + var url = app.Urls.GetOrDefault(urlName); + + if (app.RootUrl == null) + { + return Task.FromResult(url); + } + + return Task.FromResult(app.RootUrl.EnsureEndsWith('/') + url); + } } } diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/IAppUrlProvider.cs b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/IAppUrlProvider.cs index 61b6fc2bac..0043d75f45 100644 --- a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/IAppUrlProvider.cs +++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/IAppUrlProvider.cs @@ -7,6 +7,8 @@ namespace Volo.Abp.UI.Navigation.Urls { Task GetUrlAsync([NotNull] string appName, [CanBeNull] string urlName = null); + Task GetUrlOrDefaultAsync([NotNull] string appName, [CanBeNull] string urlName = null); + bool IsRedirectAllowedUrl(string url); } }