Activities of "EngincanV"

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.dll to the ..\volo.abp.suite\10.0.0\tools\net10.0\any\runtimes\win-arm64\native folder 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.

Answer

[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:

  1. In /auth route forwarding, you have used a line: proxy_set_header X-Forwarded-Prefix /hostapi, it should be proxy_set_header X-Forwarded-Prefix /auth
  2. You should use a trailing slash at the end of proxy_pass lines: proxy_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.

Answer

Yes, you need to have 4 routes. In the front-facing route, nginx should listen and forward to the related underlying service.

Answer

[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:

  1. Call the following middleware before other middlewares in your application (it should already be configured in your auth-server project):
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
  1. You basically need 4 ports: one for nginx (front), web, auth-server and hostapi. (I assume: 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/;
        }
    }
}
  1. Update the relevant 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",
    //...
  },
}
  1. Then, if your configurations are correct, it should work as expected.

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.

Showing 1 to 10 of 1376 entries
Boost Your Development
ABP Live Training
Packages
See Trainings
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v10.1.0-preview. Updated on December 08, 2025, 08:24
1
ABP Assistant
🔐 You need to be logged in to use the chatbot. Please log in first.