From 7e662694e98ef60784d697e8fd4e2fd3251a6cfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sat, 4 Feb 2017 21:56:18 +0300 Subject: [PATCH] Http tenant resolvers should be fault tolerant. --- .../MultiTenancy/CookieTenantResolver.cs | 2 +- .../MultiTenancy/DomainTenantResolver.cs | 5 +++++ .../MultiTenancy/HeaderTenantResolver.cs | 2 +- .../MultiTenancy/HttpTenantResolverBase.cs | 21 +++++++++++++++++-- .../MultiTenancy/QueryStringTenantResolver.cs | 2 +- 5 files changed, 27 insertions(+), 5 deletions(-) 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 385824e83b..9837180c47 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 @@ -7,7 +7,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy { protected override string GetTenantIdOrNameFromHttpContextOrNull(ITenantResolveContext context, HttpContext httpContext) { - return httpContext.Request.Cookies[context.GetAspNetCoreMultiTenancyOptions().TenantIdKey]; + return httpContext.Request?.Cookies[context.GetAspNetCoreMultiTenancyOptions().TenantIdKey]; } } } \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/DomainTenantResolver.cs b/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/DomainTenantResolver.cs index 07b48fd592..2ee7d7edcf 100644 --- a/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/DomainTenantResolver.cs +++ b/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/DomainTenantResolver.cs @@ -16,6 +16,11 @@ namespace Volo.Abp.AspNetCore.MultiTenancy protected override string GetTenantIdOrNameFromHttpContextOrNull(ITenantResolveContext context, HttpContext httpContext) { + if (httpContext.Request?.Host == null) + { + return null; + } + var hostName = httpContext.Request.Host.Host.RemovePreFix("http://", "https://"); var extractResult = FormattedStringValueExtracter.Extract(hostName, _domainFormat, true); 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 5b6ffe6f05..1a68fc9a35 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 @@ -11,7 +11,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy { protected override string GetTenantIdOrNameFromHttpContextOrNull(ITenantResolveContext context, HttpContext httpContext) { - if (httpContext.Request.Headers.IsNullOrEmpty()) + if (httpContext.Request == null || httpContext.Request.Headers.IsNullOrEmpty()) { return null; } 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 0a379f2b2b..a1954ad619 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,7 @@ +using System; +using JetBrains.Annotations; using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Logging; using Volo.Abp.MultiTenancy; using Volo.ExtensionMethods; @@ -6,6 +9,13 @@ namespace Volo.Abp.AspNetCore.MultiTenancy { public abstract class HttpTenantResolverBase : ITenantResolver { + private readonly ILogger _logger; + + protected HttpTenantResolverBase(ILogger logger) + { + _logger = logger; + } + public virtual void Resolve(ITenantResolveContext context) { var httpContext = context.GetHttpContext(); @@ -14,7 +24,14 @@ namespace Volo.Abp.AspNetCore.MultiTenancy return; } - ResolveFromHttpContext(context, httpContext); + try + { + ResolveFromHttpContext(context, httpContext); + } + catch (Exception e) + { + _logger.LogWarning(e.ToString()); + } } private void ResolveFromHttpContext(ITenantResolveContext context, HttpContext httpContext) @@ -26,6 +43,6 @@ namespace Volo.Abp.AspNetCore.MultiTenancy } } - protected abstract string GetTenantIdOrNameFromHttpContextOrNull(ITenantResolveContext context,HttpContext httpContext); + protected abstract string GetTenantIdOrNameFromHttpContextOrNull([NotNull] ITenantResolveContext context, [NotNull] HttpContext httpContext); } } \ No newline at end of file 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 d662113635..93eae8d345 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 @@ -7,7 +7,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy { protected override string GetTenantIdOrNameFromHttpContextOrNull(ITenantResolveContext context, HttpContext httpContext) { - if (!httpContext.Request.QueryString.HasValue) + if (httpContext.Request == null || !httpContext.Request.QueryString.HasValue) { return null; }