Open Closed

SET SUBDOMAIN FOR HOST TENANT #5560


0
luqc1985 created

hi , I'm trying to use the subdomain as Tenant approach. I updated my appconfig to use the https://{TENANCY_NAME}.domain.com/.

When the tenant is already registered, it will locate the tenant login page. If it is not registered, it will locate the host login page. I want to go to the Host login page only when I enter admin.domain.com. Other unregistered tenants are located. 404 page. What should I do?

Thanks in advance!


8 Answer(s)
  • 0
    alper created
    Support Team

    hi,

    for your subdomain issues you can create your own DomainTenantResolveContributor

    #5482@5506404d-9f34-4a1a-a88f-6c5d1da6fbbe

  • 0
    luqc1985 created

    <cite>alper: </cite> hi,

    for your subdomain issues you can create your own DomainTenantResolveContributor

    #5482@5506404d-9f34-4a1a-a88f-6c5d1da6fbbe

    public class MyDomainTenantResolveContributor : ITenantResolveContributor, ITransientDependency
    	{
    		private readonly IHttpContextAccessor _httpContextAccessor;
    		private readonly IWebMultiTenancyConfiguration _multiTenancyConfiguration;
    		private readonly ITenantStore _tenantStore;
    
    		public MyDomainTenantResolveContributor(
    			IHttpContextAccessor httpContextAccessor,
    			IWebMultiTenancyConfiguration multiTenancyConfiguration,
    			ITenantStore tenantStore)
    		{
    			_httpContextAccessor = httpContextAccessor;
    			_multiTenancyConfiguration = multiTenancyConfiguration;
    			_tenantStore = tenantStore;
    		}
    
    		public int? ResolveTenantId()
    		{
    			if (_multiTenancyConfiguration.DomainFormat.IsNullOrEmpty())
    			{
    				return null;
    			}
    
    			var httpContext = _httpContextAccessor.HttpContext;
    			if (httpContext == null)
    			{
    				return null;
    			}
    
    			var hostName = httpContext.Request.Host.Host.RemovePreFix("http://", "https://").RemovePostFix("/");
    			var domainFormat = _multiTenancyConfiguration.DomainFormat.RemovePreFix("http://", "https://").Split(':')[0].RemovePostFix("/");
    			var result = new FormattedStringValueExtracter().Extract(hostName, domainFormat, true, '/');
    
    			if (!result.IsMatch || !result.Matches.Any())
    			{
    				return null;
    			}
    
    			var tenancyName = result.Matches[0].Value;
    			
    			if (string.Equals(tenancyName, "admin", StringComparison.OrdinalIgnoreCase))
    			{
    				return null;
    			}
    
    			var tenantInfo = _tenantStore.Find(tenancyName);
    			if (tenantInfo == null)
    			{
    				throw new UserFriendlyException("404", "404Test");
    			}
    
    			return tenantInfo.Id;
    		}
    	}
    
    public override void PreInitialize()
            {
    			IocManager.Register<ITenantResolveContributor, MyDomainTenantResolveContributor>(DependencyLifeStyle.Transient);
    }
    

    Like this? But it doesn't seem to be enforced...

  • 0
    maliming created
    Support Team

    add it to resolvers in the PreInitalize method of your web module

    Configuration.MultiTenancy.Resolvers.Insert(0,new MyDomainTenantResolveContributor());
    
  • 0
    luqc1985 created

    <cite>maliming: </cite> add it to resolvers in the PreInitalize method of your web module

    Configuration.MultiTenancy.Resolvers.Insert(0,new MyDomainTenantResolveContributor());
    
    public override void PreInitialize()
            {
    			Configuration.MultiTenancy.Resolvers.Insert(0, typeof(MyDomainTenantResolveContributor));
    }
    

    It's ready to go, thank you very much

  • 0
    alper created
    Support Team

    super!

  • 0
    michelmk2 created

    @luqc1985 Does switching back to the host (using the "Back to my account" button) from any other tenants works too?

  • 0
    luqc1985 created

    @michelmk2 I didn't notice , that I just tried it, it is also 404. Back to my account also needs to modify the corresponding link. There is no tenant information in the abp object, only appPath is found.

  • 0
    ismcagdas created
    Support Team

    Latest problem is related to https://github.com/aspnetzero/aspnet-zero-core/issues/1609.

    Please reopen the issue if it doesn't help.