Browse Source

Introduce AspNetCoreMultiTenancyOptions.

pull/81/head
Halil İbrahim Kalkan 10 years ago
parent
commit
8972ba8f69
  1. 8
      src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpAspNetCoreMultiTenancyConsts.cs
  2. 15
      src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancyOptions.cs
  3. 2
      src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/CookieTenantResolver.cs
  4. 2
      src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HeaderTenantResolver.cs
  5. 11
      src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpTenantResolverBase.cs
  6. 2
      src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/QueryStringTenantResolver.cs
  7. 2
      src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/RouteTenantResolver.cs
  8. 15
      test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancy_Tests.cs

8
src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpAspNetCoreMultiTenancyConsts.cs

@ -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";
}
}

15
src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancyOptions.cs

@ -0,0 +1,15 @@
namespace Volo.Abp.AspNetCore.MultiTenancy
{
public class AspNetCoreMultiTenancyOptions
{
/// <summary>
/// Default: "__tenantId".
/// </summary>
public string TenantIdKey { get; set; }
public AspNetCoreMultiTenancyOptions()
{
TenantIdKey = "__tenantId";
}
}
}

2
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) protected override string GetTenantIdFromHttpContextOrNull(HttpContext httpContext)
{ {
return httpContext.Request.Cookies[AbpAspNetCoreMultiTenancyConsts.TenantIdKey]; return httpContext.Request.Cookies[Options.TenantIdKey];
} }
} }
} }

2
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) protected override string GetTenantIdFromHttpContextOrNull(HttpContext httpContext)
{ {
//TODO: Get first one if provided multiple values and write a log //TODO: Get first one if provided multiple values and write a log
return httpContext.Request.Headers[AbpAspNetCoreMultiTenancyConsts.TenantIdKey]; return httpContext.Request.Headers[Options.TenantIdKey];
} }
} }
} }

11
src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpTenantResolverBase.cs

@ -1,4 +1,6 @@
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Volo.Abp.MultiTenancy; using Volo.Abp.MultiTenancy;
using Volo.ExtensionMethods; using Volo.ExtensionMethods;
@ -6,14 +8,23 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
{ {
public abstract class HttpTenantResolverBase : ITenantResolver public abstract class HttpTenantResolverBase : ITenantResolver
{ {
protected AspNetCoreMultiTenancyOptions Options { get; private set; }
public virtual void Resolve(ITenantResolveContext context) public virtual void Resolve(ITenantResolveContext context)
{ {
Options = context.ServiceProvider.GetRequiredService<IOptions<AspNetCoreMultiTenancyOptions>>().Value;
var httpContext = context.GetHttpContext(); var httpContext = context.GetHttpContext();
if (httpContext == null) if (httpContext == null)
{ {
return; return;
} }
ResolveFromHttpContext(context, httpContext);
}
private void ResolveFromHttpContext(ITenantResolveContext context, HttpContext httpContext)
{
var tenantId = GetTenantIdFromHttpContextOrNull(httpContext); var tenantId = GetTenantIdFromHttpContextOrNull(httpContext);
if (!tenantId.IsNullOrEmpty()) if (!tenantId.IsNullOrEmpty())
{ {

2
src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/QueryStringTenantResolver.cs

@ -11,7 +11,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
return null; return null;
} }
return httpContext.Request.Query[AbpAspNetCoreMultiTenancyConsts.TenantIdKey]; return httpContext.Request.Query[Options.TenantIdKey];
} }
} }
} }

2
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) protected override string GetTenantIdFromHttpContextOrNull(HttpContext httpContext)
{ {
var tenantId = httpContext.GetRouteValue(AbpAspNetCoreMultiTenancyConsts.TenantIdKey); var tenantId = httpContext.GetRouteValue(Options.TenantIdKey);
if (tenantId == null) if (tenantId == null)
{ {
return null; return null;

15
test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancy_Tests.cs

@ -1,5 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
using Shouldly; using Shouldly;
using Volo.Abp.AspNetCore.App; using Volo.Abp.AspNetCore.App;
@ -9,6 +11,13 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
{ {
public class AspNetCoreMultiTenancy_Tests : AppTestBase public class AspNetCoreMultiTenancy_Tests : AppTestBase
{ {
private readonly AspNetCoreMultiTenancyOptions _options;
public AspNetCoreMultiTenancy_Tests()
{
_options = ServiceProvider.GetRequiredService<IOptions<AspNetCoreMultiTenancyOptions>>().Value;
}
[Fact] [Fact]
public async Task Should_Use_Host_If_Tenant_Is_Not_Specified() public async Task Should_Use_Host_If_Tenant_Is_Not_Specified()
{ {
@ -21,7 +30,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
{ {
const string testTenantId = "42"; const string testTenantId = "42";
var result = await GetResponseAsObjectAsync<Dictionary<string, string>>($"http://abp.io?{AbpAspNetCoreMultiTenancyConsts.TenantIdKey}={testTenantId}"); var result = await GetResponseAsObjectAsync<Dictionary<string, string>>($"http://abp.io?{_options.TenantIdKey}={testTenantId}");
result["TenantId"].ShouldBe(testTenantId); result["TenantId"].ShouldBe(testTenantId);
} }
@ -30,7 +39,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
{ {
const string testTenantId = "42"; const string testTenantId = "42";
Client.DefaultRequestHeaders.Add(AbpAspNetCoreMultiTenancyConsts.TenantIdKey, testTenantId); Client.DefaultRequestHeaders.Add(_options.TenantIdKey, testTenantId);
var result = await GetResponseAsObjectAsync<Dictionary<string, string>>("http://abp.io"); var result = await GetResponseAsObjectAsync<Dictionary<string, string>>("http://abp.io");
result["TenantId"].ShouldBe(testTenantId); result["TenantId"].ShouldBe(testTenantId);
@ -41,7 +50,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
{ {
const string testTenantId = "42"; 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<Dictionary<string, string>>("http://abp.io"); var result = await GetResponseAsObjectAsync<Dictionary<string, string>>("http://abp.io");
result["TenantId"].ShouldBe(testTenantId); result["TenantId"].ShouldBe(testTenantId);

Loading…
Cancel
Save