我使用 asp.net 样板作为Web项目和移动应用程序的后端。
该应用程序是多租户。
我有一种方法可以验证移动访问代码。
这是它的代码
[AllowAnonymous]
[ProducesResponseType(typeof(UserDataModel), 200)]
[ProducesResponseType(401)]
[HttpPost]
public async Task<IActionResult> ValidateMobileAccessCode(MobileInvitationCodeInput input)
{
var tenant = await _tenantRepository.GetAll().Where(x => x.Id == AbpSession.TenantId).FirstOrDefaultAsync();
var userId = await _userMobileAccessCodeService.ValidateCodeAndGetUserIdAsync(input.CodeValue);
if (userId == null)
{
return Unauthorized();
}
var user = await _userManager.GetUserOrNullAsync(new UserIdentifier(AbpSession.TenantId, userId.Value));
return Ok(new UserDataModel
{
UserId = userId.Value,
CodeValue = input.CodeValue,
Name = user.FullName,
EmailAddress = user.EmailAddress,
CompanyName = tenant == null ? "Host tenant" : tenant.TenancyName
});
}
但是这一行var tenant = await _tenantRepository.GetAll().Where(x => x.Id == AbpSession.TenantId).FirstOrDefaultAsync();
将返回 null,因为我在移动应用程序中没有会话。
如何获取移动应用的租户 ID?
我试图通过文档找到解决方案,但没有运气
您可以通过标头 Abp.TenantId 设置 TenantId。还可以解析租户抛出自定义租户解析程序机制。您需要实现中间件,该中间件将在处理您的请求之前运行,并将其添加到配置中。
Configuration.MultiTenancy.Resolvers.Add<DefaultTenantResolveContributor>();
您应该从接口继承:
ITenantResolveContributor