Browse Source

Http tenant resolvers should be fault tolerant.

pull/81/head
Halil İbrahim Kalkan 10 years ago
parent
commit
7e662694e9
  1. 2
      src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/CookieTenantResolver.cs
  2. 5
      src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/DomainTenantResolver.cs
  3. 2
      src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HeaderTenantResolver.cs
  4. 21
      src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpTenantResolverBase.cs
  5. 2
      src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/QueryStringTenantResolver.cs

2
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) protected override string GetTenantIdOrNameFromHttpContextOrNull(ITenantResolveContext context, HttpContext httpContext)
{ {
return httpContext.Request.Cookies[context.GetAspNetCoreMultiTenancyOptions().TenantIdKey]; return httpContext.Request?.Cookies[context.GetAspNetCoreMultiTenancyOptions().TenantIdKey];
} }
} }
} }

5
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) 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 hostName = httpContext.Request.Host.Host.RemovePreFix("http://", "https://");
var extractResult = FormattedStringValueExtracter.Extract(hostName, _domainFormat, true); var extractResult = FormattedStringValueExtracter.Extract(hostName, _domainFormat, true);

2
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) protected override string GetTenantIdOrNameFromHttpContextOrNull(ITenantResolveContext context, HttpContext httpContext)
{ {
if (httpContext.Request.Headers.IsNullOrEmpty()) if (httpContext.Request == null || httpContext.Request.Headers.IsNullOrEmpty())
{ {
return null; return null;
} }

21
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.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Volo.Abp.MultiTenancy; using Volo.Abp.MultiTenancy;
using Volo.ExtensionMethods; using Volo.ExtensionMethods;
@ -6,6 +9,13 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
{ {
public abstract class HttpTenantResolverBase : ITenantResolver public abstract class HttpTenantResolverBase : ITenantResolver
{ {
private readonly ILogger<HttpTenantResolverBase> _logger;
protected HttpTenantResolverBase(ILogger<HttpTenantResolverBase> logger)
{
_logger = logger;
}
public virtual void Resolve(ITenantResolveContext context) public virtual void Resolve(ITenantResolveContext context)
{ {
var httpContext = context.GetHttpContext(); var httpContext = context.GetHttpContext();
@ -14,7 +24,14 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
return; return;
} }
ResolveFromHttpContext(context, httpContext); try
{
ResolveFromHttpContext(context, httpContext);
}
catch (Exception e)
{
_logger.LogWarning(e.ToString());
}
} }
private void ResolveFromHttpContext(ITenantResolveContext context, HttpContext httpContext) 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);
} }
} }

2
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) protected override string GetTenantIdOrNameFromHttpContextOrNull(ITenantResolveContext context, HttpContext httpContext)
{ {
if (!httpContext.Request.QueryString.HasValue) if (httpContext.Request == null || !httpContext.Request.QueryString.HasValue)
{ {
return null; return null;
} }

Loading…
Cancel
Save