Thanks.
That fixed the problem, but is this a bug and should the script contributor be automatically configured by way of my Web module having a dependency on the ChatWebModule?
Or, is this the typical approach for making the module scripts available in the Web projects?
jquery.js?_v=637774598147390000:4059 Uncaught TypeError: Cannot read properties of undefined (reading 'users') at HTMLDocument. (chatMessageReceiving…2743500000000:12:31) at mightThrow (jquery.js?_v=637774598147390000:3766:29) at process (jquery.js?_v=637774598147390000:3834:12)
Please help me to understand the Dynamic JavaScript API Client Proxies, the architecture a little better and that I am taking the correct steps for accessing the proxies from the Web application.
In order to access module proxy scripts from the Web project, I did the following:
I notice though that all of these proxy scripts are available from the HttpApi (https://localhost:44308/Abp/ServiceProxyScript) project and wonder why the Web project doesn't utilize the HttpApi scripts directly?
I also noticed that some of the framework modules are available already in the HttpApi.Client (abp, cms-kit and cms-kit-pro module), while some of the other ones I am using are not.
Thanks - appreciate the help.
ABP Version 5.1.1
The profile picture does not seem to be working properly. It shows properly on the account page, but not in the web or public web applications. Doesn't make a difference if changing to Avatar/Gravatar or uploaded file, still shows:
Error in the browser on get of the picture:

With an Id that corresponds with the Admin user Id:
thank you
Hi
I'm trying to get my solution running locally in docker and having an issue with the authorization.
When I try to authorize:
I think this is likely an issue with configuration in the appsettings.json or docker-compose.yml files but I need some help.
appsettings.json { "App": { "SelfUrl": "https://localhost:44360", "AngularUrl": "http://localhost:4200", "CorsOrigins": "https://.Portal.com,http://localhost:4200", "RedirectAllowedUrls": "http://localhost:4200,https://localhost:44307,http://localhost:8080" }, "Redis": { "Configuration": "127.0.0.1" }, "ConnectionStrings": { "Default": "Server=host.docker.internal; Database=CTSDb; User=docker; Password=dockertime; Max Pool Size=400;" }, "AuthServer": { "Authority": "https://localhost:44360", "RequireHttpsMetadata": "false", "SwaggerClientId": "Portal_Swagger", "SwaggerClientSecret": "1q2w3e" }, "StringEncryption": { "DefaultPassPhrase": "6MynJDJ1sxdTgSZD" }, "Settings": { "Volo.Abp.LeptonTheme.Style": "Style6", "Volo.Abp.LeptonTheme.Layout.MenuPlacement": "Left", "Volo.Abp.LeptonTheme.Layout.MenuStatus": "AlwaysOpened", "Volo.Abp.LeptonTheme.Layout.Boxed": "False" }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "HealthChecksUI": { "HealthChecks": [ { "Name": "Portal Health Status AppSettings Config", "Uri": "http://localhost:80/health-status" } ], "EvaluationTimeOnSeconds": 10, "MinimumSecondsBetweenFailureNotifications": 60 } }
docker-compose.yml:
version: '3.8'
services:
portal_web_svr:
container_name: portal_web_dev
image: aldercovempn.azurecr.io/acs/portal_web_dev
networks:
- cts_portal_network
volumes:
- ./default.conf:/etc/nginx/conf.d/default.conf:z
ports:
- "4200:4200"
depends_on:
- portal_api_svr
portal_api_svr: container_name: portal_api_dev image: aldercovempn.azurecr.io/acs/portal_api_dev networks: - cts_portal_network environment: - ASPNETCORE_ENVIRONMENT=Production - ConnectionStrings__Default=Server=host.docker.internal;Database=Acs_Portal;User id=docker; Password=dockertime; volumes: - ./Host-Logs:/app/Logs - ./App_Data:/app/App_Data:z - ./appsettings.json:/app/appsettings.json:z ports: - "44360:44360" - "44307:44307" - "8080:80" - "44345:443"
links:
- redis
redis: container_name: portal_redis # Container name image: redis networks: - cts_portal_network
networks: cts_portal_network:
Thanks
2021-12-06 19:15:19.798 +00:00 [INF] Start processing HTTP request GET "http://[::]/health-status" 2021-12-06 19:15:19.798 +00:00 [INF] Sending HTTP request GET "http://[::]/health-status" 2021-12-06 19:15:19.809 +00:00 [ERR] GetHealthReport threw an exception when trying to get report from /health-status configured with name Portal Health Status. System.Net.Http.HttpRequestException: IPv4 address 0.0.0.0 and IPv6 address ::0 are unspecified addresses that cannot be used as a target address. (Parameter 'hostName') ([::]:80) ---> System.ArgumentException: IPv4 address 0.0.0.0 and IPv6 address ::0 are unspecified addresses that cannot be used as a target address. (Parameter 'hostName') at System.Net.Dns.GetHostEntryOrAddressesCoreAsync(String hostName, Boolean justReturnParsedIp, Boolean throwOnIIPAny, Boolean justAddresses) at System.Net.Dns.BeginGetHostAddresses(String hostNameOrAddress, AsyncCallback requestCallback, Object state) at System.Net.Sockets.MultipleConnectAsync.StartConnectAsync(SocketAsyncEventArgs args, DnsEndPoint endPoint) at System.Net.Sockets.Socket.ConnectAsync(SocketAsyncEventArgs e, Boolean userSocket) at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ConnectAsync(Socket socket) at System.Net.Sockets.Socket.ConnectAsync(EndPoint remoteEP, CancellationToken cancellationToken) at System.Net.Sockets.SocketTaskExtensions.ConnectAsync(Socket socket, EndPoint remoteEP, CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.DefaultConnectAsync(SocketsHttpConnectionContext context, CancellationToken cancellationToken) at System.Net.Http.ConnectHelper.ConnectAsync(Func3 callback, DnsEndPoint endPoint, HttpRequestMessage requestMessage, CancellationToken cancellationToken) --- End of inner exception stack trace --- at System.Net.Http.ConnectHelper.ConnectAsync(Func3 callback, DnsEndPoint endPoint, HttpRequestMessage requestMessage, CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.GetHttpConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken) at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) at Microsoft.Extensions.Http.Logging.LoggingHttpMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) at Microsoft.Extensions.Http.Logging.LoggingScopeHttpMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) at System.Net.Http.HttpClient.SendAsyncCore(HttpRequestMessage request, HttpCompletionOption completionOption, Boolean async, Boolean emitTelemetryStartStop, CancellationToken cancellationToken) at HealthChecks.UI.Core.HostedService.HealthCheckReportCollector.GetHealthReport(HealthCheckConfiguration configuration) i
The health checks UI shows this status:
I can configure another health check in the appconfig, which works OK:
appconfig.json settings:
"HealthChecksUI": { "HealthChecks": [ { "Name": "Portal Health Status AppSettings Config", "Uri": "http://localhost:80/health-status" } ], "EvaluationTimeOnSeconds": 10, "MinimumSecondsBetweenFailureNotifications": 60 }
application Log:
2021-12-06 20:36:17.126 +00:00 [INF] Executing endpoint 'HealthChecks UI Api' 2021-12-06 20:36:17.128 +00:00 [INF] Executed endpoint 'HealthChecks UI Api' 2021-12-06 20:36:17.128 +00:00 [INF] Request finished HTTP/1.1 GET http://localhost:8080/health-api - - - 200 - application/json 10.1569ms 2021-12-06 20:36:20.024 +00:00 [INF] Start processing HTTP request GET "http://localhost/health-status" 2021-12-06 20:36:20.024 +00:00 [INF] Sending HTTP request GET "http://localhost/health-status" 2021-12-06 20:36:20.025 +00:00 [INF] Request starting HTTP/1.1 GET http://localhost/health-status - - 2021-12-06 20:36:20.028 +00:00 [INF] Executing endpoint 'Health checks' 2021-12-06 20:36:20.030 +00:00 [INF] Executed endpoint 'Health checks' 2021-12-06 20:36:20.031 +00:00 [INF] Received HTTP response headers after 7.0253ms - 200 2021-12-06 20:36:20.031 +00:00 [INF] End processing HTTP request after 7.1096ms - 200
I use docker compose to deploy the app locally to docker
`version: '3.8'
services:
portal_web_svr:
container_name: portal_web_dev
image: aldercovempn.azurecr.io/acs/portal_web_dev
networks:
- cts_portal_network
volumes:
- ./default.conf:/etc/nginx/conf.d/default.conf:z
ports:
- "4200:4200"
depends_on:
- portal_api_svr
portal_api_svr: container_name: portal_api_dev image: aldercovempn.azurecr.io/acs/portal_api_dev networks: - cts_portal_network environment: - ASPNETCORE_ENVIRONMENT=Production - ConnectionStrings__Default=Server=host.docker.internal;Database=Acs_Portal;User id=docker; Password=dockertime; volumes: - ./Host-Logs:/app/Logs - ./App_Data:/app/App_Data:z - ./appsettings.json:/app/appsettings.json:z ports: - "44360:44360" - "44307:44307" - "8080:80" links: - redis
redis: container_name: portal_redis # Container name image: redis networks: - cts_portal_network
networks: cts_portal_network: `
@Rrader30
Appreciate for info, was hoping to utilize out of the box too but will have to craft my own as well.
Marketplace for modules would be nice!
Thanks
@Rrader30, we need to do something similar.
I think the File Management module is an incomplete feature without the ability to manage permissions to folders, or at least utilize in a way that provides a root folder as an entry point to the UI, so that the user is restricted to only that folder and its subfolders.
There's an open issue for Resource based authorization integration: https://github.com/abpframework/abp/issues/236
Have you found workable a solution yet that you can share?
Thanks Jamie
Adding a new multi-tenanted entity through ABP Suite has AutoMapperConfigurationException
ABP Framework version: v4.3.0 ( module template) UI type: MVC DB provider: EF Core Identity Server Separated: no
When starting the Unified App from a Module template, after generating a multi-tenanted entity, adding migration and updating SQL database, the application has exception on startup:
AutoMapperConfigurationException: Unmapped members were found. Review the types and members below. Add a custom mapping expression, ignore, add a custom resolver, or modify the source/destination type For no matching constructor, add a no-arg ctor, add optional arguments, or map all of the constructor parameters
ResourceClassTypeCreateDto -> ResourceClassType (Destination member list) Acs.ResourceLibrary.ResourceClassTypes.ResourceClassTypeCreateDto -> Acs.ResourceLibrary.ResourceClassTypes.ResourceClassType (Destination member list)
TenantId
ResourceClassTypeUpdateDto -> ResourceClassType (Destination member list) Acs.ResourceLibrary.ResourceClassTypes.ResourceClassTypeUpdateDto -> Acs.ResourceLibrary.ResourceClassTypes.ResourceClassType (Destination member list)
Unmapped properties: TenantId AutoMapper.ConfigurationValidator.AssertConfigurationIsValid(IEnumerable typeMaps)
<br>
DependencyResolutionException: An exception was thrown while activating λ:Microsoft.AspNetCore.Identity.ISecurityStampValidator -> Castle.Proxies.AbpSecurityStampValidatorProxy -> Volo.Abp.MultiTenancy.TenantConfigurationProvider -> Volo.Saas.Tenants.TenantStore -> Volo.Abp.ObjectMapping.DefaultObjectMapper1[[Volo.Saas.SaasDomainModule, Volo.Saas.Domain, Version=4.3.0.0, Culture=neutral, PublicKeyToken=null]] -> Volo.Abp.AutoMapper.AutoMapperAutoObjectMappingProvider1[[Volo.Saas.SaasDomainModule, Volo.Saas.Domain, Version=4.3.0.0, Culture=neutral, PublicKeyToken=null]] -> λ:Volo.Abp.AutoMapper.IMapperAccessor -> λ:Volo.Abp.AutoMapper.MapperAccessor.
Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action next)
<br> Was able to resolve the issue by adding .Ignore(x => x.TenantId) extension on the CreateMap in the src/Project.Application ProjectAutoMapperProfile class:
Is that the correct approach?