From dc68fe77d78cf7f8ce3703758471d3cc4d8d3f06 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 30 Nov 2022 11:53:55 +0800 Subject: [PATCH 1/2] Add abp headers to Dapr's `HttpClient`. --- .../Volo/Abp/Dapr/AbpDaprClientFactory.cs | 44 ++++++++++++++++++- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/AbpDaprClientFactory.cs b/framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/AbpDaprClientFactory.cs index aa14bbe7f2..b94c113fca 100644 --- a/framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/AbpDaprClientFactory.cs +++ b/framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/AbpDaprClientFactory.cs @@ -1,10 +1,14 @@ using System; +using System.Globalization; using System.Net.Http; +using System.Net.Http.Headers; using System.Text.Json; using Dapr.Client; using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; using Volo.Abp.Json.SystemTextJson; +using Volo.Abp.MultiTenancy; +using Volo.Abp.Tracing; namespace Volo.Abp.Dapr; @@ -13,13 +17,21 @@ public class AbpDaprClientFactory : IAbpDaprClientFactory, ISingletonDependency protected AbpDaprOptions DaprOptions { get; } protected JsonSerializerOptions JsonSerializerOptions { get; } protected IDaprApiTokenProvider DaprApiTokenProvider { get; } + protected ICurrentTenant CurrentTenant { get; } + protected ICorrelationIdProvider CorrelationIdProvider { get; } + protected IOptions AbpCorrelationIdOptions { get; } public AbpDaprClientFactory( IOptions options, IOptions systemTextJsonSerializerOptions, - IDaprApiTokenProvider daprApiTokenProvider) + IDaprApiTokenProvider daprApiTokenProvider, + ICurrentTenant currentTenant, ICorrelationIdProvider correlationIdProvider, + IOptions abpCorrelationIdOptions) { DaprApiTokenProvider = daprApiTokenProvider; + CurrentTenant = currentTenant; + CorrelationIdProvider = correlationIdProvider; + AbpCorrelationIdOptions = abpCorrelationIdOptions; DaprOptions = options.Value; JsonSerializerOptions = CreateJsonSerializerOptions(systemTextJsonSerializerOptions.Value); } @@ -61,11 +73,39 @@ public class AbpDaprClientFactory : IAbpDaprClientFactory, ISingletonDependency daprEndpoint = DaprOptions.HttpEndpoint; } - return DaprClient.CreateInvokeHttpClient( + var httpClient = DaprClient.CreateInvokeHttpClient( appId, daprEndpoint, daprApiToken ?? DaprApiTokenProvider.GetDaprApiToken() ); + + AddHeaders(httpClient); + + return httpClient; + } + + protected virtual void AddHeaders(HttpClient httpClient) + { + //CorrelationId + httpClient.DefaultRequestHeaders.Add(AbpCorrelationIdOptions.Value.HttpHeaderName, CorrelationIdProvider.Get()); + + //TenantId + if (CurrentTenant.Id.HasValue) + { + //TODO: Use AbpAspNetCoreMultiTenancyOptions to get the key + httpClient.DefaultRequestHeaders.Add(TenantResolverConsts.DefaultTenantKey, CurrentTenant.Id.Value.ToString()); + } + + //Culture + //TODO: Is that the way we want? Couldn't send the culture (not ui culture) + var currentCulture = CultureInfo.CurrentUICulture.Name ?? CultureInfo.CurrentCulture.Name; + if (!currentCulture.IsNullOrEmpty()) + { + httpClient.DefaultRequestHeaders.AcceptLanguage.Add(new StringWithQualityHeaderValue(currentCulture)); + } + + //X-Requested-With + httpClient.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest"); } protected virtual JsonSerializerOptions CreateJsonSerializerOptions(AbpSystemTextJsonSerializerOptions systemTextJsonSerializerOptions) From 8fa1b0155dca48d602cf6cdf8a72401e10e3b1e2 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 9 Nov 2023 16:12:34 +0800 Subject: [PATCH 2/2] Add `AbpMultiTenancyAbstractionsModule` into `AbpDaprModule ` --- framework/src/Volo.Abp.Dapr/Volo.Abp.Dapr.csproj | 1 + framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/AbpDaprModule.cs | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Dapr/Volo.Abp.Dapr.csproj b/framework/src/Volo.Abp.Dapr/Volo.Abp.Dapr.csproj index 92377ef51a..34a505110c 100644 --- a/framework/src/Volo.Abp.Dapr/Volo.Abp.Dapr.csproj +++ b/framework/src/Volo.Abp.Dapr/Volo.Abp.Dapr.csproj @@ -12,6 +12,7 @@ + diff --git a/framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/AbpDaprModule.cs b/framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/AbpDaprModule.cs index e1ca4bb0db..65605bc342 100644 --- a/framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/AbpDaprModule.cs +++ b/framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/AbpDaprModule.cs @@ -4,10 +4,11 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Volo.Abp.Json; using Volo.Abp.Modularity; +using Volo.Abp.MultiTenancy; namespace Volo.Abp.Dapr; -[DependsOn(typeof(AbpJsonModule))] +[DependsOn(typeof(AbpJsonModule), typeof(AbpMultiTenancyAbstractionsModule))] public class AbpDaprModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context)