Hello again, I got a quick update:
We released v10.0.1 yesterday, so you can update your ABP Suite version and generate CRUD pages as before.
Regards.
[merdan] said: Manually downloading Microsoft.ClearScript.V8.Native.win-arm64 nuget package and extracting
ClearScriptV8.win-arm64.dllto the..\volo.abp.suite\10.0.0\tools\net10.0\any\runtimes\win-arm64\nativefolder fixed the issue.While this workaround works, still keeping this issue open so that an ABP developer can fix this in future releases.
Hi @merdan, thanks for the quick reply. We will fix this asap, thanks for reporting. (refunded your ticket)
Does ABP Suite support generating a full 3-level child hierarchy (With Master-Child) (e.g., Lesson → Tests → Questions) with the Angular as frontend ?
Hi, currently ABP Suite does not support 3+ level master-child relationship. A master can have multiple child entities associated with it but unfortunately, in the current design, you can't make a child entity as a master entity of an another entity.
Regards.
Hi, apologies that the thread was closed earlier (our bot automatically closed the thread because after the latest AI bot response, there was no activity in the question).
From a best practices standpoint, you are correct that the constructors of entities should be marked as internal rather than public, given that we also create domain services and the core logic resides there, so no need to make them public. I will create an issue to address this.
Regards.
Hi, sorry for the inconvenience. When the AI bot responds, it automatically disappears from our dashboard until you write an answer (and if you don't, the question is closed after some time).
You're definitely right to argue for the creation of domain services for child entities. From a best practices standpoint, child entities should not have domain services; their entire logic should reside within the domain or application services of the master entities. We already have an issue logged to make the necessary changes to align with best practices. Our primary goal was to implement this feature without affecting too many components, thereby making the related changes relatively straightforward for developers. This was the rationale behind our chosen approach. Nonetheless, I agree with your point and will aim to prioritize the issue and address it as soon as possible.
Regards.
[user6.abpio] said: Hi, I’ve modified the necessary files inside the Suite template set as you described, but the files are still not being physically created under the /XXX folder.
For example, Index.cshtml, Index.Extended.cshtml, and index.js are still generated under /Pages/Teams, not /Pages/XXX/Teams.
I can only modify the internal paths (like view URLs) inside the templates, but I can’t control where the files are actually created.
Which specific Suite template or configuration files should I modify to change the physical output path of the generated Pages?
Hi, please ignore the response of the AI-bot. Unfortunately, currently it's not supported. ABP Suite directly puts your pages under the Pages directory (Pages/<entity-plural-name>). I think we should support that and will create an issue for it.
Regards.
Hi Chris, thank you for your detailed explanation and for clarifying the scenario. I don't have much experience with Azure Blob Storage but I'll try to clarify some points for you.
1. Recommended Approach in ABP Framework
As far as I know, you should be able to implement tenant/module/entity level separation by customizing the container naming convention. By default, IAzureBlobNameCalculator is used to calculate the full BLOB name, so you can create a service that implements this interface and apply your own logic. You can check the DefaultAzureBlobNameCalculator (https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/DefaultAzureBlobNameCalculator.cs) service for the current implementation. (Currently, the naming is something like: tenants/<tenant-id>)
2) Centralized Configuration
For the configuration, you can refer to our documentation: https://abp.io/docs/latest/framework/infrastructure/blob-storing/azure#configuration (when it's being configured for default, it applies to all)
3) Overriding ABP Suite’s Scaffolding
Currently, you can search for File text in the ABP Suite's templates and update the .txt files. Unfortunately, this is the only option you have for now, or you need to update the code later the code generation manually.
4) Manual Implementation and Best Practices
If you are considering creating your own file-manager services, I recommend using the IBlobContainer service to make it provider-agnostic, so you can change the provider afterward if it's needed.
On the other hand, it depends on how you structure your solution and services. I'm not sure that I have a suggestion at that point.
Btw, it is worth reiterating that, once the Azure Blob Provider is configured, the system is expected to behave as follows:
When a file is uploaded, a new record containing the file’s metadata is inserted into the *FileDescriptors table in the database, while the file content is stored in Azure Blob Storage. Subsequently, when the file is needed, the IBlobContainer service retrieves it from Azure and returns it to the requesting component.
[sghorakavi@cpat.com] said:
[EngincanV] said: Yes, you need to have 4 routes. In the front-facing route, nginx should listen and forward to the related underlying service.
Can you pls review nginx reverse proxy? It is not working as planned.
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 44500; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; proxy_pass https://localhost:44385; proxy_ssl_verify off; } # Reverse proxy to your ABP Host API app location /hostapi/ { proxy_pass https://localhost:44348; proxy_http_version 1.1; proxy_ssl_verify off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Prefix /hostapi; # WebSocket / Hot Reload support proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } location /auth/ { proxy_pass https://localhost:44394; proxy_http_version 1.1; proxy_ssl_verify off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Prefix /hostapi; # WebSocket / Hot Reload support proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }Added forward header option in host module
I am attempting to invoke: https://localhost:44500 - web https://localhost:44500/hostapi - host api https://localhost:44500/auth - Auth
Hi, it seems there are a few mistakes in the nginx.config:
proxy_set_header X-Forwarded-Prefix /hostapi, it should be proxy_set_header X-Forwarded-Prefix /authproxy_pass https://localhost:44348/;#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 44500;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
# Redirect no-trailing-slash to with-slash so the /hostapi/ and /auth/ blocks match
location = /hostapi { return 301 /hostapi/; }
location = /auth { return 301 /auth/; }
location / {
proxy_pass https://localhost:44385/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_ssl_verify off;
}
# Reverse proxy to your ABP Host API app
location /hostapi/ {
proxy_pass https://localhost:44348/;
proxy_http_version 1.1;
proxy_ssl_verify off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /hostapi;
# WebSocket / Hot Reload support
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /auth/ {
proxy_pass https://localhost:44394/;
proxy_http_version 1.1;
proxy_ssl_verify off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /auth;
# WebSocket / Hot Reload support
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
Also, ensure you made the correct configs in the appsettings.json files for your projects.
Yes, you need to have 4 routes. In the front-facing route, nginx should listen and forward to the related underlying service.
[sghorakavi@cpat.com] said: Can you pls send me ABP MVC multi layer sample that can handle above port situation ? We are planning to use one domain and we will use reverse proxy.
https://localhost:44356/auth -- auth server https://localhost:44356/hostapi - hostapi server https://localhost:44356 - web server
Thank you
Hi, actually, this is not fully related to ABP, but it's related to your application and nginx configs. So, you may need to work on that manually. However, I can explain what should be done step by step and clarify some steps for you:
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
44356 for nginx-front side, and then 44378 for web , 44339 for auth-server and 44342 for hostapi). Configure your nginx.config file accordingly:events {}
http {
server {
listen 44356;
location / {
proxy_pass http://localhost:44378;
}
location /auth/ {
proxy_pass http://localhost:44339/;
}
location /hostapi/ {
proxy_pass http://localhost:44342/;
}
}
}
appsettings.json files for each project:Web:
{
"App": {
"SelfUrl": "https://localhost:44356", //UPDATED
"DisablePII": false,
"HealthCheckUrl": "/health-status"
},
"RemoteServices": {
"Default": {
"BaseUrl": "https://localhost:44356/hostapi/" //UPDATED
},
"AbpAccountPublic": {
"BaseUrl": "https://localhost:44356/auth/" //UPDATED
}
},
"AuthServer": {
"Authority": "https://localhost:44356/auth", //UPDATED
"RequireHttpsMetadata": true,
"ClientId": "AbpNginxDemo_Web",
"ClientSecret": "1q2w3e*"
},
}
Auth-server (optional, and also update cors-origins accordingly):
"App": {
"SelfUrl": "https://localhost:44356/auth",
//...
},
"AuthServer": {
"Authority": "https://localhost:44356/auth"
}
HttpApiHost:
{
"App": {
"SelfUrl": "https://localhost:44356/hostapi",
//...
},
"AuthServer": {
"Authority": "https://localhost:44356/auth",
"RequireHttpsMetadata": true,
"MetaAddress": "https://localhost:44356/auth",
//...
},
}
Also, for this problem, the IIS page means you’re trying to run more than one ASP.NET Core app “in-process” in the same IIS Application Pool, which isn’t supported. You can search for this error on Stack Overflow and see the possible solutions.
Regards.