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/AbpDaprClientFactory.cs b/framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/AbpDaprClientFactory.cs
index 43e9dbc953..92a2961cd4 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)
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)