From 8972ba8f6976765e0e421f9830ef6e1249564ffe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 9 Jan 2017 23:37:06 +0300 Subject: [PATCH] Introduce AspNetCoreMultiTenancyOptions. --- .../AbpAspNetCoreMultiTenancyConsts.cs | 8 -------- .../MultiTenancy/AspNetCoreMultiTenancyOptions.cs | 15 +++++++++++++++ .../MultiTenancy/CookieTenantResolver.cs | 2 +- .../MultiTenancy/HeaderTenantResolver.cs | 2 +- .../MultiTenancy/HttpTenantResolverBase.cs | 11 +++++++++++ .../MultiTenancy/QueryStringTenantResolver.cs | 2 +- .../MultiTenancy/RouteTenantResolver.cs | 2 +- .../MultiTenancy/AspNetCoreMultiTenancy_Tests.cs | 15 ++++++++++++--- 8 files changed, 42 insertions(+), 15 deletions(-) delete mode 100644 src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpAspNetCoreMultiTenancyConsts.cs create mode 100644 src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancyOptions.cs 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);