首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ABP框架Angular应用中列出可用租户

如何在ABP框架Angular应用中列出可用租户
EN

Stack Overflow用户
提问于 2021-01-20 03:19:37
回答 1查看 269关注 0票数 0

我希望在我的主页上列出可用的租户(在总部基地框架生成的Angular应用程序上)。列表中的每个项目都应该有一个指向该租户的链接。

第一个问题是我找不到应该返回租户的服务:我尝试了AbpTenantServiceMultiTenancyService

在ASP.NET核心主机上生成了一个终结点(GET /api/multi-tenancy/tenants),但我似乎在TypeScript中找不到代理。

我确实确保运行了abp generate-proxy

辅助问题是,将__tenant={tenant_name}__tenant={tenant_id}传递给查询字符串似乎无法更改租户。

根据documentation,默认模板包括查询字符串承租人解析器:QueryStringTenantResolveContributor

EN

回答 1

Stack Overflow用户

发布于 2021-01-24 03:09:54

下面是如何获得租户(从主机端)

代码语言:javascript
复制
public class GetTenantsInput : PagedAndSortedResultRequestDto
    {
        public string Filter { get; set; }
    }

代码语言:javascript
复制
 public class SaasTenantDto : ExtensibleEntityDto<Guid>
    {
        public string Name { get; set; }
    }

代码语言:javascript
复制
public class EfCoreTenantRepository : EfCoreRepository<ISaasDbContext, Tenant, Guid>, ITenantRepository
{
    public EfCoreTenantRepository(IDbContextProvider<ISaasDbContext> dbContextProvider)
        : base(dbContextProvider)
    {

    } 

    public virtual async Task<List<Tenant>> GetListAsync(
        string sorting = null,
        int maxResultCount = int.MaxValue,
        int skipCount = 0,
        string filter = null,
        bool includeDetails = false,
        CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .IncludeDetails(includeDetails)
            .WhereIf(
                !filter.IsNullOrWhiteSpace(),
                u =>
                    u.Name.Contains(filter)
            )
            .OrderBy(sorting ?? nameof(Tenant.Name))
            .PageBy(skipCount, maxResultCount)
            .ToListAsync(GetCancellationToken(cancellationToken));
    }

    public virtual async Task<long> GetCountAsync(string filter = null, CancellationToken cancellationToken = default)
    {
        return await this
            .WhereIf(
                !filter.IsNullOrWhiteSpace(),
                u =>
                    u.Name.Contains(filter)
            ).CountAsync(cancellationToken: cancellationToken);
    }

    [Obsolete("Use WithDetailsAsync method.")]
    public override IQueryable<Tenant> WithDetails()
    {
        return GetQueryable().IncludeDetails();
    }

    public override async Task<IQueryable<Tenant>> WithDetailsAsync()
    {
        return (await GetQueryableAsync()).IncludeDetails();
    }
}

代码语言:javascript
复制
public virtual async Task<PagedResultDto<SaasTenantDto>> GetListAsync(GetTenantsInput input)
{
    var count = await TenantRepository.GetCountAsync(input.Filter);
    var list = await TenantRepository.GetListAsync(
        input.Sorting,
        input.MaxResultCount,
        input.SkipCount,
        input.Filter
    );

    var tenantDtos = ObjectMapper.Map<List<Tenant>, List<SaasTenantDto>>(list);

    return new PagedResultDto<SaasTenantDto>(
        count,
        tenantDtos
    );
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65798088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档