У меня есть машинопись, которая вызывает API-интерфейс, как показано ниже:
this._userService.createOrUpdateUser(input)
.pipe(finalize(() => { this.saving = false; }))
.subscribe(() => {
this.notify.info(this.l('SavedSuccessfully'));
this.close();
this.modalSave.emit(null);
});
Мои C точные коды, как показано ниже:
public async Task CreateOrUpdateUser(CreateOrUpdateUserInput input)
{
if (input.User.Id.HasValue)
{
await UpdateUserAsync(input);
}
else
{
await CreateUserAsync(input);
}
}
CreateUserAsyn c (вход ), как показано ниже:
protected virtual async Task CreateUserAsync(CreateOrUpdateUserInput input)
{
if (AbpSession.TenantId.HasValue)
{
await _userPolicy.CheckMaxUserCountAsync(AbpSession.GetTenantId());
}
var user = ObjectMapper.Map<User>(input.User); //Passwords is not mapped (see mapping configuration)
user.TenantId = AbpSession.TenantId;
//Set password
if (input.SetRandomPassword)
{
var randomPassword = await _userManager.CreateRandomPassword();
user.Password = _passwordHasher.HashPassword(user, randomPassword);
input.User.Password = randomPassword;
}
else if (!input.User.Password.IsNullOrEmpty())
{
await UserManager.InitializeOptionsAsync(AbpSession.TenantId);
foreach (var validator in _passwordValidators)
{
CheckErrors(await validator.ValidateAsync(UserManager, user, input.User.Password));
}
user.Password = _passwordHasher.HashPassword(user, input.User.Password);
}
user.ShouldChangePasswordOnNextLogin = input.User.ShouldChangePasswordOnNextLogin;
//Assign roles
user.Roles = new Collection<UserRole>();
foreach (var roleName in input.AssignedRoleNames)
{
var role = await _roleManager.GetRoleByNameAsync(roleName);
user.Roles.Add(new UserRole(AbpSession.TenantId, user.Id, role.Id));
}
CheckErrors(await UserManager.CreateAsync(user));
await CurrentUnitOfWork.SaveChangesAsync(); //To get new user's Id.
//Notifications
await _notificationSubscriptionManager.SubscribeToAllAvailableNotificationsAsync(user.ToUserIdentifier());
await _appNotifier.WelcomeToTheApplicationAsync(user);
//Organization Units
await UserManager.SetOrganizationUnitsAsync(user, input.OrganizationUnits.ToArray());
//Send activation email
if (input.SendActivationEmail)
{
user.SetNewEmailConfirmationCode();
await _userEmailer.SendEmailActivationLinkAsync(
user,
AppUrlService.CreateEmailActivationUrlFormat(AbpSession.TenantId),
input.User.Password
);
}
}
Я попытался установить сигнатуру метода в Task и возвратил user.id. Но на стороне машинописного текста он, похоже, не получает идентификатор.
Кто-нибудь знает, как я могу получить идентификатор, когда вызывается функция CreateUserAsyn c?