diff --git a/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpAspNetCoreMultiTenancyConsts.cs b/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpAspNetCoreMultiTenancyConsts.cs
deleted file mode 100644
index 2bc830b59c..0000000000
--- a/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpAspNetCoreMultiTenancyConsts.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Volo.Abp.AspNetCore.MultiTenancy
-{
- public static class AbpAspNetCoreMultiTenancyConsts
- {
- //TODO: Get from an option instead of a constant!
- public const string TenantIdKey = "__tenantId";
- }
-}
\ No newline at end of file
diff --git a/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancyOptions.cs b/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancyOptions.cs
new file mode 100644
index 0000000000..db4423f921
--- /dev/null
+++ b/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancyOptions.cs
@@ -0,0 +1,15 @@
+namespace Volo.Abp.AspNetCore.MultiTenancy
+{
+ public class AspNetCoreMultiTenancyOptions
+ {
+ ///
+ /// Default: "__tenantId".
+ ///
+ public string TenantIdKey { get; set; }
+
+ public AspNetCoreMultiTenancyOptions()
+ {
+ TenantIdKey = "__tenantId";
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/CookieTenantResolver.cs b/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/CookieTenantResolver.cs
index b73c9b9678..6a6ac15aa6 100644
--- a/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/CookieTenantResolver.cs
+++ b/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/CookieTenantResolver.cs
@@ -6,7 +6,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
{
protected override string GetTenantIdFromHttpContextOrNull(HttpContext httpContext)
{
- return httpContext.Request.Cookies[AbpAspNetCoreMultiTenancyConsts.TenantIdKey];
+ return httpContext.Request.Cookies[Options.TenantIdKey];
}
}
}
\ No newline at end of file
diff --git a/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HeaderTenantResolver.cs b/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HeaderTenantResolver.cs
index a15897d566..613f53ae4c 100644
--- a/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HeaderTenantResolver.cs
+++ b/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HeaderTenantResolver.cs
@@ -7,7 +7,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
protected override string GetTenantIdFromHttpContextOrNull(HttpContext httpContext)
{
//TODO: Get first one if provided multiple values and write a log
- return httpContext.Request.Headers[AbpAspNetCoreMultiTenancyConsts.TenantIdKey];
+ return httpContext.Request.Headers[Options.TenantIdKey];
}
}
}
\ No newline at end of file
diff --git a/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpTenantResolverBase.cs b/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpTenantResolverBase.cs
index 773dde007c..7b09e90514 100644
--- a/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpTenantResolverBase.cs
+++ b/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpTenantResolverBase.cs
@@ -1,4 +1,6 @@
using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
using Volo.Abp.MultiTenancy;
using Volo.ExtensionMethods;
@@ -6,14 +8,23 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
{
public abstract class HttpTenantResolverBase : ITenantResolver
{
+ protected AspNetCoreMultiTenancyOptions Options { get; private set; }
+
public virtual void Resolve(ITenantResolveContext context)
{
+ Options = context.ServiceProvider.GetRequiredService>().Value;
+
var httpContext = context.GetHttpContext();
if (httpContext == null)
{
return;
}
+ ResolveFromHttpContext(context, httpContext);
+ }
+
+ private void ResolveFromHttpContext(ITenantResolveContext context, HttpContext httpContext)
+ {
var tenantId = GetTenantIdFromHttpContextOrNull(httpContext);
if (!tenantId.IsNullOrEmpty())
{
diff --git a/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/QueryStringTenantResolver.cs b/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/QueryStringTenantResolver.cs
index ab5c4ad59f..d50ae4e980 100644
--- a/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/QueryStringTenantResolver.cs
+++ b/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/QueryStringTenantResolver.cs
@@ -11,7 +11,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
return null;
}
- return httpContext.Request.Query[AbpAspNetCoreMultiTenancyConsts.TenantIdKey];
+ return httpContext.Request.Query[Options.TenantIdKey];
}
}
}
diff --git a/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/RouteTenantResolver.cs b/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/RouteTenantResolver.cs
index efff74461c..854edf2323 100644
--- a/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/RouteTenantResolver.cs
+++ b/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/RouteTenantResolver.cs
@@ -8,7 +8,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
{
protected override string GetTenantIdFromHttpContextOrNull(HttpContext httpContext)
{
- var tenantId = httpContext.GetRouteValue(AbpAspNetCoreMultiTenancyConsts.TenantIdKey);
+ var tenantId = httpContext.GetRouteValue(Options.TenantIdKey);
if (tenantId == null)
{
return null;
diff --git a/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancy_Tests.cs b/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancy_Tests.cs
index cfca0ce91a..2e665f2ba8 100644
--- a/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancy_Tests.cs
+++ b/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancy_Tests.cs
@@ -1,5 +1,7 @@
using System.Collections.Generic;
using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
using Microsoft.Net.Http.Headers;
using Shouldly;
using Volo.Abp.AspNetCore.App;
@@ -9,6 +11,13 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
{
public class AspNetCoreMultiTenancy_Tests : AppTestBase
{
+ private readonly AspNetCoreMultiTenancyOptions _options;
+
+ public AspNetCoreMultiTenancy_Tests()
+ {
+ _options = ServiceProvider.GetRequiredService>().Value;
+ }
+
[Fact]
public async Task Should_Use_Host_If_Tenant_Is_Not_Specified()
{
@@ -21,7 +30,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
{
const string testTenantId = "42";
- var result = await GetResponseAsObjectAsync>($"http://abp.io?{AbpAspNetCoreMultiTenancyConsts.TenantIdKey}={testTenantId}");
+ var result = await GetResponseAsObjectAsync>($"http://abp.io?{_options.TenantIdKey}={testTenantId}");
result["TenantId"].ShouldBe(testTenantId);
}
@@ -30,7 +39,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
{
const string testTenantId = "42";
- Client.DefaultRequestHeaders.Add(AbpAspNetCoreMultiTenancyConsts.TenantIdKey, testTenantId);
+ Client.DefaultRequestHeaders.Add(_options.TenantIdKey, testTenantId);
var result = await GetResponseAsObjectAsync>("http://abp.io");
result["TenantId"].ShouldBe(testTenantId);
@@ -41,7 +50,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
{
const string testTenantId = "42";
- Client.DefaultRequestHeaders.Add("Cookie", new CookieHeaderValue(AbpAspNetCoreMultiTenancyConsts.TenantIdKey, testTenantId).ToString());
+ Client.DefaultRequestHeaders.Add("Cookie", new CookieHeaderValue(_options.TenantIdKey, testTenantId).ToString());
var result = await GetResponseAsObjectAsync>("http://abp.io");
result["TenantId"].ShouldBe(testTenantId);