hi RonaldR
You can try to upgrade to 3.3.1.
https://github.com/abpframework/abp/pull/5728
If the upgrade package does not solve your problem. you can try to create a template project and share the steps to reproduce the problem to me, thank you
hi pvaz
You are using the Tiered Structure application, please refer to the documentation to learn how to run it.
https://docs.abp.io/en/commercial/latest/startup-templates/application/solution-structure#dbmigrator-project
https://docs.abp.io/en/commercial/latest/startup-templates/application/solution-structure#tiered-structure
https://docs.abp.io/en/commercial/latest/startup-templates/application/solution-structure#how-to-run-1
hi pvaz
If you get other questions or problems, please feel free to feedback. Thank you.
Access to the path 'C:\Users\Paulo Vaz.dotnet\tools\abp-suite.exe' is denied.
This looks like a permission issue in windows.
You can try to use the administrator to open the cmd
and execute the abp suite install
command.
hi
You can call the methods of the application service layer in the web layer. In the application service layer, you can use repositoriy to read and write databases.
I suggest you start with the documentation
https://docs.abp.io/en/abp/latest/Domain-Driven-Design https://docs.abp.io/en/abp/latest/Application-Services https://docs.abp.io/en/abp/latest/Repositories
hi
Can you share some code to reproduce the problem?
hi
You can take a look at this https://support.abp.io/QA/Questions/160/How-to-customize-an-ABP-project
hi @michael.sudnik
The below code is the patch. I will fix this in 4.0.
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Volo.Abp.Account;
using Volo.Abp.Account.Public.Web.Pages.Account;
using Volo.Abp.DependencyInjection;
using IdentityUser = Volo.Abp.Identity.IdentityUser;
namespace MyApp.Web
{
[ExposeServices(typeof(MyRegisterModel), typeof(RegisterModel))]
public class MyRegisterModel : RegisterModel
{
protected override async Task RegisterExternalUserAsync(ExternalLoginInfo externalLoginInfo, string emailAddress)
{
var user = new IdentityUser(GuidGenerator.Create(), emailAddress, emailAddress, CurrentTenant.Id);
(await UserManager.CreateAsync(user)).CheckErrors();
(await UserManager.AddDefaultRolesAsync(user)).CheckErrors();
if (!user.EmailConfirmed)
{
await AccountAppService.SendEmailConfirmationTokenAsync(
new SendEmailConfirmationTokenDto
{
AppName = "MVC",
Email = emailAddress,
ReturnUrl = ReturnUrl,
ReturnUrlHash = ReturnUrlHash
}
);
}
var userLoginAlreadyExists = user.Logins.Any(x =>
x.TenantId == user.TenantId &&
x.LoginProvider == externalLoginInfo.LoginProvider &&
x.ProviderKey == externalLoginInfo.ProviderKey);
if (!userLoginAlreadyExists)
{
user.AddLogin(new UserLoginInfo(
externalLoginInfo.LoginProvider,
externalLoginInfo.ProviderKey,
externalLoginInfo.ProviderDisplayName
)
);
(await UserManager.UpdateAsync(user)).CheckErrors();
}
await SignInManager.SignInAsync(user, isPersistent: true);
}
}
}
hi
It seems there is a problem with mongodb, I will check it. Thank you
hi @rachanee-mwp
You can create a custom ConfigurationSettingValueProvider
then read settings via underscore name
.
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpSettingOptions>(options =>
{
options.ValueProviders.InsertAfter(typeof(ConfigurationSettingValueProvider), typeof(MyConfigurationSettingValueProvider));
});
}
public class MyConfigurationSettingValueProvider : ISettingValueProvider, ITransientDependency
{
public const string ConfigurationNamePrefix = "Settings:";
public const string ProviderName = "MC";
public string Name => ProviderName;
protected IConfiguration Configuration { get; }
public MyConfigurationSettingValueProvider(IConfiguration configuration)
{
Configuration = configuration;
}
public virtual Task<string> GetOrNullAsync(SettingDefinition setting)
{
return Task.FromResult(Configuration[ConfigurationNamePrefix + setting.Name.Replace(".", "_")]);
}
public Task<List<SettingValue>> GetAllAsync(SettingDefinition[] settings)
{
return Task.FromResult(settings.Select(x => new SettingValue(x.Name, Configuration[ConfigurationNamePrefix + x.Name.Replace(".", "_")])).ToList());
}
}