diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo/Abp/AspNetCore/Components/Server/Extensibility/BlazorServerLookupApiRequestService.cs b/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo/Abp/AspNetCore/Components/Server/Extensibility/BlazorServerLookupApiRequestService.cs index b7e2de8364..4d0118f117 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo/Abp/AspNetCore/Components/Server/Extensibility/BlazorServerLookupApiRequestService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo/Abp/AspNetCore/Components/Server/Extensibility/BlazorServerLookupApiRequestService.cs @@ -19,9 +19,7 @@ namespace Volo.Abp.AspNetCore.Components.Server.Extensibility { public IHttpClientFactory HttpClientFactory { get; } public IRemoteServiceHttpClientAuthenticator HttpClientAuthenticator { get; } - - public AbpRemoteServiceOptions RemoteServiceOptions { get; } - + public IRemoteServiceConfigurationProvider RemoteServiceConfigurationProvider { get; } public ICurrentTenant CurrentTenant { get; } public IHttpContextAccessor HttpContextAccessor { get; } public NavigationManager NavigationManager { get; } @@ -29,16 +27,16 @@ namespace Volo.Abp.AspNetCore.Components.Server.Extensibility public BlazorServerLookupApiRequestService(IHttpClientFactory httpClientFactory, IRemoteServiceHttpClientAuthenticator httpClientAuthenticator, ICurrentTenant currentTenant, - IOptions remoteServiceOptions, IHttpContextAccessor httpContextAccessor, - NavigationManager navigationManager) + NavigationManager navigationManager, + IRemoteServiceConfigurationProvider remoteServiceConfigurationProvider) { HttpClientFactory = httpClientFactory; HttpClientAuthenticator = httpClientAuthenticator; - RemoteServiceOptions = remoteServiceOptions.Value; CurrentTenant = currentTenant; HttpContextAccessor = httpContextAccessor; NavigationManager = navigationManager; + RemoteServiceConfigurationProvider = remoteServiceConfigurationProvider; } public async Task SendAsync(string url) @@ -53,7 +51,7 @@ namespace Volo.Abp.AspNetCore.Components.Server.Extensibility try { //Blazor tiered -- mode - var remoteServiceConfig = RemoteServiceOptions.RemoteServices.GetConfigurationOrDefault("Default"); + var remoteServiceConfig = RemoteServiceConfigurationProvider.GetConfigurationOrDefault("Default"); baseUrl = remoteServiceConfig.BaseUrl; client.BaseAddress = new Uri(baseUrl); AddHeaders(requestMessage); diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/Extensibility/WebAssemblyLookupApiRequestService.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/Extensibility/WebAssemblyLookupApiRequestService.cs index be4a6f8bfb..98a097d4aa 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/Extensibility/WebAssemblyLookupApiRequestService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/Extensibility/WebAssemblyLookupApiRequestService.cs @@ -17,20 +17,18 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.Extensibility { public IHttpClientFactory HttpClientFactory { get; } public IRemoteServiceHttpClientAuthenticator HttpClientAuthenticator { get; } - - public AbpRemoteServiceOptions RemoteServiceOptions { get; } - + public IRemoteServiceConfigurationProvider RemoteServiceConfigurationProvider { get; } public ICurrentTenant CurrentTenant { get; } public WebAssemblyLookupApiRequestService(IHttpClientFactory httpClientFactory, IRemoteServiceHttpClientAuthenticator httpClientAuthenticator, ICurrentTenant currentTenant, - IOptions remoteServiceOptions) + IRemoteServiceConfigurationProvider remoteServiceConfigurationProvider) { HttpClientFactory = httpClientFactory; HttpClientAuthenticator = httpClientAuthenticator; - RemoteServiceOptions = remoteServiceOptions.Value; CurrentTenant = currentTenant; + RemoteServiceConfigurationProvider = remoteServiceConfigurationProvider; } public async Task SendAsync(string url) @@ -42,7 +40,7 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.Extensibility var uri = new Uri(url, UriKind.RelativeOrAbsolute); if (!uri.IsAbsoluteUri) { - var remoteServiceConfig = RemoteServiceOptions.RemoteServices.GetConfigurationOrDefault("Default"); + var remoteServiceConfig = RemoteServiceConfigurationProvider.GetConfigurationOrDefault("Default"); client.BaseAddress = new Uri(remoteServiceConfig.BaseUrl); await HttpClientAuthenticator.Authenticate(new RemoteServiceHttpClientAuthenticateContext(client, requestMessage, new RemoteServiceConfiguration(remoteServiceConfig.BaseUrl), string.Empty)); } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyServerUrlProvider.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyServerUrlProvider.cs index 865871b5a5..c2ac027f91 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyServerUrlProvider.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyServerUrlProvider.cs @@ -9,17 +9,17 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly [Dependency(ReplaceServices = true)] public class WebAssemblyServerUrlProvider : IServerUrlProvider, ITransientDependency { - public AbpRemoteServiceOptions Options { get; } + protected IRemoteServiceConfigurationProvider RemoteServiceConfigurationProvider { get; } public WebAssemblyServerUrlProvider( - IOptions options) + IRemoteServiceConfigurationProvider remoteServiceConfigurationProvider) { - Options = options.Value; + RemoteServiceConfigurationProvider = remoteServiceConfigurationProvider; } public string GetBaseUrl(string remoteServiceName = null) { - return Options.RemoteServices.GetConfigurationOrDefault( + return RemoteServiceConfigurationProvider.GetConfigurationOrDefault( remoteServiceName ?? RemoteServiceConfigurationDictionary.DefaultName ).BaseUrl.EnsureEndsWith('/'); } diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs index a397f1b53e..6a0d607274 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs @@ -34,7 +34,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying protected AbpCorrelationIdOptions AbpCorrelationIdOptions { get; } protected IDynamicProxyHttpClientFactory HttpClientFactory { get; } protected IApiDescriptionFinder ApiDescriptionFinder { get; } - protected AbpRemoteServiceOptions AbpRemoteServiceOptions { get; } + protected IRemoteServiceConfigurationProvider RemoteServiceConfigurationProvider { get; } protected AbpHttpClientOptions ClientOptions { get; } protected IJsonSerializer JsonSerializer { get; } protected IRemoteServiceHttpClientAuthenticator ClientAuthenticator { get; } @@ -51,25 +51,25 @@ namespace Volo.Abp.Http.Client.DynamicProxying public DynamicHttpProxyInterceptor( IDynamicProxyHttpClientFactory httpClientFactory, IOptions clientOptions, - IOptionsSnapshot remoteServiceOptions, IApiDescriptionFinder apiDescriptionFinder, IJsonSerializer jsonSerializer, IRemoteServiceHttpClientAuthenticator clientAuthenticator, ICancellationTokenProvider cancellationTokenProvider, ICorrelationIdProvider correlationIdProvider, IOptions correlationIdOptions, - ICurrentTenant currentTenant) + ICurrentTenant currentTenant, + IRemoteServiceConfigurationProvider remoteServiceConfigurationProvider) { CancellationTokenProvider = cancellationTokenProvider; CorrelationIdProvider = correlationIdProvider; CurrentTenant = currentTenant; + RemoteServiceConfigurationProvider = remoteServiceConfigurationProvider; AbpCorrelationIdOptions = correlationIdOptions.Value; HttpClientFactory = httpClientFactory; ApiDescriptionFinder = apiDescriptionFinder; JsonSerializer = jsonSerializer; ClientAuthenticator = clientAuthenticator; ClientOptions = clientOptions.Value; - AbpRemoteServiceOptions = remoteServiceOptions.Value; Logger = NullLogger>.Instance; } @@ -135,7 +135,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying private async Task MakeRequestAsync(IAbpMethodInvocation invocation) { var clientConfig = ClientOptions.HttpClientProxies.GetOrDefault(typeof(TService)) ?? throw new AbpException($"Could not get DynamicHttpClientProxyConfig for {typeof(TService).FullName}."); - var remoteServiceConfig = AbpRemoteServiceOptions.RemoteServices.GetConfigurationOrDefault(clientConfig.RemoteServiceName); + var remoteServiceConfig = RemoteServiceConfigurationProvider.GetConfigurationOrDefault(clientConfig.RemoteServiceName); var client = HttpClientFactory.Create(clientConfig.RemoteServiceName); @@ -263,8 +263,8 @@ namespace Volo.Abp.Http.Client.DynamicProxying var clientConfig = ClientOptions.HttpClientProxies.GetOrDefault(typeof(TService)) ?? throw new AbpException($"Could not get DynamicHttpClientProxyConfig for {typeof(TService).FullName}."); - return AbpRemoteServiceOptions.RemoteServices.GetOrDefault(clientConfig.RemoteServiceName)?.Version - ?? AbpRemoteServiceOptions.RemoteServices.Default?.Version; + return RemoteServiceConfigurationProvider + .GetConfigurationOrDefaultOrNull(clientConfig.RemoteServiceName)?.Version; } private async Task ThrowExceptionForResponseAsync(HttpResponseMessage response) diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/IRemoteServiceConfigurationProvider.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/IRemoteServiceConfigurationProvider.cs new file mode 100644 index 0000000000..78f7daf336 --- /dev/null +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/IRemoteServiceConfigurationProvider.cs @@ -0,0 +1,13 @@ +using JetBrains.Annotations; + +namespace Volo.Abp.Http.Client +{ + public interface IRemoteServiceConfigurationProvider + { + [NotNull] + RemoteServiceConfiguration GetConfigurationOrDefault(string name); + + [CanBeNull] + RemoteServiceConfiguration GetConfigurationOrDefaultOrNull(string name); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/RemoteServiceConfigurationDictionary.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/RemoteServiceConfigurationDictionary.cs index 248285d748..fa76ec76b1 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/RemoteServiceConfigurationDictionary.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/RemoteServiceConfigurationDictionary.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using JetBrains.Annotations; namespace Volo.Abp.Http.Client { @@ -12,11 +13,19 @@ namespace Volo.Abp.Http.Client set => this[DefaultName] = value; } + [NotNull] public RemoteServiceConfiguration GetConfigurationOrDefault(string name) { return this.GetOrDefault(name) ?? Default ?? throw new AbpException($"Remote service '{name}' was not found and there is no default configuration."); } + + [CanBeNull] + public RemoteServiceConfiguration GetConfigurationOrDefaultOrNull(string name) + { + return this.GetOrDefault(name) + ?? Default; + } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/RemoteServiceConfigurationProvider.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/RemoteServiceConfigurationProvider.cs new file mode 100644 index 0000000000..fe2a7296d4 --- /dev/null +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/RemoteServiceConfigurationProvider.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Http.Client +{ + public class RemoteServiceConfigurationProvider : IRemoteServiceConfigurationProvider, IScopedDependency + { + protected AbpRemoteServiceOptions Options { get; } + + public RemoteServiceConfigurationProvider(IOptionsSnapshot options) + { + Options = options.Value; + } + + public virtual RemoteServiceConfiguration GetConfigurationOrDefault(string name) + { + return Options.RemoteServices.GetConfigurationOrDefault(name); + } + + public virtual RemoteServiceConfiguration GetConfigurationOrDefaultOrNull(string name) + { + return Options.RemoteServices.GetConfigurationOrDefaultOrNull(name); + } + } +} \ No newline at end of file