I have one .net core web api project which is not abp solution but I want to use the blob storing module with this project. I have created one module in the project as below.
[DependsOn(typeof(NxPBlobStoringAwsModule))]
public class NxPAipModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
//context.Services.AddAutoMapperObjectMapper<>();
base.PreConfigureServices(context);
Configure<AbpBlobStoringOptions>(options =>
{
options.Containers.Configure<DocumentBlobContainer>(container =>
{
container.UseAws(Aws =>
{
Aws.Region = "eu-west-2";
Aws.CreateContainerIfNotExists = true;
Aws.UseClientSideEncryption = false;
Aws.AccessKeyId = "";
Aws.SecretAccessKey= "";
Aws.ContainerName = "nxp-staging-1";
});
});
});
}
}
and create the intance of NxPApiModule in program.cs file as below.
using (var application = AbpApplicationFactory.Create<ChurchAipModule>(options =>
{
options.UseAutofac();
}))
This is my NxPBlobStoringAwsModule
[DependsOn(typeof(AbpBlobStoringModule),
typeof(AbpCachingModule),
typeof(AbpAutofacModule))]
public class NxPBlobStoringAwsModule : AbpModule
{
}
When I run the project, I am getting below exception on application build.
1[Church.Api.DocumentBlobContainer]': Unable to resolve service for type 'Volo.Abp.BlobStoring.IBlobContainerFactory' while attempting to activate 'Volo.Abp.BlobStoring.BlobContainer1[Church.Api.DocumentBlobContainer]'.) (Error while validating the service descriptor 'ServiceType: Church.Api.Services.IShipmentAppService Lifetime: Transient ImplementationType: Church.Api.Services.ShipmentAppService':I am using the azure blob storage module and when I upload image on blob, it creates the host name folder on the blob container. I don't want to create the host folder and want to use my path without the host folder. I set multi tenancy false but still it is pointing to host folder.
Here is my configuration in module
var configuration = context.Services.GetConfiguration();
Configure<AbpBlobStoringOptions>(options =>
{
options.Containers.Configure<CategoryBlobContainer>(container =>
{
container.IsMultiTenant = false;
container.UseAzure(azure =>
{
azure.ConnectionString = configuration["BlobStoring:Containers:AzureContainer:Configuration:ConnectionString"];
azure.ContainerName = configuration["BlobStoring:Containers:AzureContainer:Configuration:ContainerName"];
azure.CreateContainerIfNotExists = true;
});
});
});
When we add permission or remove permission from the Roles or Users, It takes too much time to apply that permission. I have to restart the application to apply permission changes so how we can resolve the permission issues and update the caching data on permission change. I am using the modular architecture and I have several applications as modules.
I have one library and I am using the Feature Store GetOrNullAsync but it returning the null value and when I debug the code and check the Results View, the data is there.
I have created new module and add each project references to main application project like application into application, ef into ef module. When I add migration with module dbContext then It throws error that no dbContext was found. The startup project is main host application and selected project is main entity framework module.
I have configured the Azure OpenId but when I use organization login and try to register the user, auth server throwing exception of Setting value for 'Abp.Mailing.Smtp.Password' is null or empty!
.AddOpenIdConnect("AzureOpenId", "Organisation login", options =>
{
options.Authority = configuration["Azure:AzureAd:Instance"] + configuration["Azure:AzureAd:TenantId"] + configuration["Azure:AzureAd:Version"];
options.ClientId = configuration["Azure:AzureAd:ClientId"];
options.ResponseType = OpenIdConnectResponseType.CodeIdToken;
options.CallbackPath = configuration["Azure:AzureAd:CallbackPath"];
options.ClientSecret = configuration["Azure:AzureAd:ClientSecret"];
options.RequireHttpsMetadata = false;
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("email");
});
If I create user from users management then there is no error and its working fine.
I want to add one property passcode for user in create user and my account personal info section. I have followed below article and extra property is added in database.
https://abp.io/community/articles/identityuser-relationship-and-extending-it-xtv79mpx#:~:text=Extending%20the%20User%20Entity%20With,entity%20of%20the%20Identity%20Module.
private static void ConfigureExtraProperties()
{
ObjectExtensionManager.Instance.Modules()
.ConfigureIdentity(identity =>
{
identity.ConfigureUser(user =>
{
user.AddOrUpdateProperty<string>(
"Passcode",
property =>
{
property.Attributes.Add(new StringLengthAttribute(12) { MinimumLength = 6 });
property.DisplayName = new FixedLocalizableString("Passcode");
property.Configuration[IdentityModuleExtensionConsts.ConfigurationNames.AllowUserToEdit] = true;
}
);
});
});
}
But that property is not displaying in UI, I have angular application. Is there any configuration that I need to apply in angular application?
I want to use the SignalR the same way the IAuditingStore is working. I want to notify to the client on every new entry is added into the system for specific entity only. I auditing is working for all the entities but notification to the client should be based on specified entities in configuration. Is there any module available to performance this action?
I have microservice architecture. I have deployed the application on the sever. When I click to login, it redirects to auth server and successfully logged in and redirected back to angular application but authentication is not working. The token api and openid-configuration api is fine. The token is also generated. I checked the logs of auth server and token is successfully validated.
I checked the administration service logs.
[08:47:56 INF] Failed to validate the token. Microsoft.IdentityModel.Tokens.SecurityTokenInvalidIssuerException: IDX10204: Unable to validate issuer. validationParameters.ValidIssuer is null or whitespace AND validationParameters.ValidIssuers is null or empty. at Microsoft.IdentityModel.Tokens.Validators.ValidateIssuerAsync(String issuer, SecurityToken securityToken, TokenValidationParameters validationParameters, BaseConfiguration configuration) at Microsoft.IdentityModel.Tokens.Validators.ValidateIssuer(String issuer, SecurityToken securityToken, TokenValidationParameters validationParameters, BaseConfiguration configuration) at Microsoft.IdentityModel.JsonWebTokens.JsonWebTokenHandler.ValidateSignature(JsonWebToken jwtToken, TokenValidationParameters validationParameters, BaseConfiguration configuration) at Microsoft.IdentityModel.JsonWebTokens.JsonWebTokenHandler.ValidateSignatureAndIssuerSecurityKey(JsonWebToken jsonWebToken, TokenValidationParameters validationParameters, BaseConfiguration configuration) at Microsoft.IdentityModel.JsonWebTokens.JsonWebTokenHandler.ValidateJWSAsync(JsonWebToken jsonWebToken, TokenValidationParameters validationParameters, BaseConfiguration configuration)
I have Microservice architecture. I have added Custom exception filter in NxP.Shared.Hosting.Microservices.
namespace NxP.Shared.Hosting.Microservices
{
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(AbpExceptionFilter), typeof(IAsyncExceptionFilter))]
public class GlobalExceptionFilter : AbpExceptionFilter, ITransientDependency
{
private readonly IDistributedEventBus _distributedEventBus;
private readonly ILogger< GlobalExceptionFilter > _logger;
public GlobalExceptionFilter(IDistributedEventBus distributedEventBus, ILogger< GlobalExceptionFilter > logger)
{
_distributedEventBus = distributedEventBus;
_logger = logger;
}
public override async Task OnExceptionAsync(ExceptionContext context)
{
var exception = context.Exception;
var actionDescriptor = context.ActionDescriptor;
var exceptionLogEto = new ExceptionLogEto
{
Message = exception.Message,
Type = exception.GetType().Name,
StackTrace = exception.InnerException?.Message ?? exception.StackTrace,
Source = exception.Source,
ControllerName = actionDescriptor.RouteValues["controller"],
ActionName = actionDescriptor.RouteValues["action"],
};
await _distributedEventBus.PublishAsync(exceptionLogEto);
_logger.LogInformation("Exception handled by GlobalExceptionFilter.");
//await base.OnExceptionAsync(context);
// throw exception;
//context.ExceptionHandled = true;
}
}
}
I have added filters in services in NxPSharedHostingMicroservicesModule
context.Services.AddTransient< GlobalExceptionFilter >();
context.Services.AddControllers(options =>
{
options.Filters.AddService< GlobalExceptionFilter >();
}).AddControllersAsServices();
I have handler in LoggingService to receive exception data and storing in database, but the event is not receiving in LoggingService. There is no exception and event data is not publishing. I have also checked the sample console application.
Handler in logging microservice.
public class ExceptionLogHandler : IDistributedEventHandler< ExceptionLogEto >, ITransientDependency
{
private readonly ILogger< ExceptionLogHandler > _logger;
private readonly IExceptionLogRepository _exceptionLogRepository;
public ExceptionLogHandler(ILogger< ExceptionLogHandler > logger
, IExceptionLogRepository exceptionLogRepository
)
{
_logger = logger;
_exceptionLogRepository = exceptionLogRepository;
_logger.LogInformation("ExceptionLogHandler initialized.");
}
[UnitOfWork]
public async Task HandleEventAsync(ExceptionLogEto eventData)
{
_logger.LogInformation("Handling exception log...");
ExceptionLog exceptionLog = new ExceptionLog(
Guid.NewGuid(),
eventData.Message,
eventData.Type,
eventData.StackTrace,
eventData.Source,
eventData.ControllerName,
eventData.ActionName,
DateTime.Now
);
_logger.LogInformation(Newtonsoft.Json.JsonConvert.SerializeObject(exceptionLog));
await _exceptionLogRepository.InsertAsync(exceptionLog);
}
}