The error you are seeing (Cannot read properties of undefined (reading 'then')
at _LocalizationService.registerLocale
) occurs because the ABP Angular localization system expects a full page reload when changing the language. The built-in language switcher in LeptonX and ABP Angular triggers a hard reload after setting the language, ensuring all localization resources are reloaded and registered.
In your custom onChangeLang
method, you are only calling this.sessionState.setLanguage(cultureName);
which updates the language in the session, but does not reload the page. As a result, the localization service tries to register the new locale without the necessary resources, causing the error.
To fix this, after setting the language, you should force a full page reload:
onChangeLang(cultureName: string) {
this.sessionState.setLanguage(cultureName);
location.reload();
}
This matches the behavior of the default ABP/LeptonX language switcher and ensures the new language is fully applied without errors.
For more details, see the official documentation:
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
The error "The 'wwwroot/libs' folder does not exist or empty!" occurs because the AuthServer project expects client-side libraries in the wwwroot/libs directory, but for Angular UI projects, the AuthServer does not require these libraries by default.
In Angular-based ABP solutions, the AuthServer project is typically a pure backend (API and authentication) project and does not serve static client-side assets. The wwwroot/libs folder is only necessary for MVC or Blazor UI projects.
To resolve this, you should disable the check for the libs folder in your AuthServer project. Open your AuthServer's module class (e.g., AcsCtsWorkforceManagementAuthServerModule.cs) and add the following configuration in the ConfigureServices method:
Configure<AbpMvcLibsOptions>(options =>
{
options.CheckLibs = false;
});
This will prevent the application from checking for the wwwroot/libs folder on startup.
You do not need to run abp install-libs in the AuthServer project for Angular UI solutions.
Sources:
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
This error is typically caused by a resource path (such as a script, style, or bundle reference) that does not start with a forward slash ("/"). In ABP 9.3.x, the bundling/tag helper system is stricter and requires all resource paths to be absolute (i.e., start with "/").
href
or src
attribute for scripts, styles, and other resources starts with a /
.<link href="content/DevExpress.Blazor.Themes/blazing-berry.bs5.min.css" rel="stylesheet" />
to:
<link href="/content/DevExpress.Blazor.Themes/blazing-berry.bs5.min.css" rel="stylesheet" />
Check ABP Bundling TagHelpers
<abp-script-bundle>
, <abp-style-bundle>
), make sure the bundle names and file paths are correct and start with /
.Review Custom TagHelpers or Resource Injections
Check for Dynamic Path Generation
/
.Restart and Clean Solution
This should resolve the error in your _Host.cshtml
file after upgrading to ABP 9.3.1.
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
To ensure that the Angular frontend receives the backend's AbpCookieConsentOptions (such as CookiePolicyUrl and PrivacyPolicyUrl), these options must be exposed via the application configuration API. By default, ABP's GDPR module does not automatically send the backend cookie consent options to the Angular client through /api/abp/application-configuration. This is why you do not see these options in the API response, and the frontend does not bind to them unless you set them manually in provideGdprConfig.
Solution:
Manual Synchronization Required:
Currently, you need to manually keep the backend and frontend cookie consent options in sync. The backend configuration (AbpCookieConsentOptions) is used for the server-side rendering and .NET-based UI, but the Angular module expects its own configuration via provideGdprConfig.
How to Synchronize:
Why This Happens:
The ABP GDPR module's backend options are not automatically included in the application configuration sent to the Angular client. This is by design, as the Angular module is decoupled and expects explicit configuration.
Summary:
There is no built-in mechanism in ABP 9.0.5 to automatically bind backend AbpCookieConsentOptions to the Angular frontend. You must set the options in both places or implement a custom solution to fetch and apply them on the client.
Sources:
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
When you migrate from ABP 9.0.4 to 9.2.3, the login process for tenants in a tiered MVC application may trigger the AbpApplicationConfigurationAppService.GetAsync()
method. This method is responsible for providing application configuration data (such as localization, settings, and features) to the client after authentication.
If you see logs indicating that AbpApplicationConfigurationAppService.GetAsync()
is being executed during tenant login, this is expected behavior. The application calls this service to retrieve configuration data for the authenticated user and tenant context.
If logout is not happening as expected, ensure that your authentication and tenant resolution logic is correctly implemented and that the session or authentication cookies are properly cleared on logout.
For customizations, you can override or extend the AbpApplicationConfigurationAppService
to include additional configuration data if needed. However, the default behavior is to call this service after a successful login to initialize the client-side application state.
If you are experiencing issues with the login or logout flow after migration, review your authentication configuration, tenant resolution, and any custom middleware that may affect the authentication lifecycle.
No verified source available for this specific query.
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
The exception you are encountering is due to a breaking change in the Microsoft.IdentityModel.Tokens package version 8.12.1, where experimental code was accidentally released and then removed in a subsequent patch. This causes a MissingMethodException when libraries (such as Microsoft.AspNetCore.Authentication.OpenIdConnect) expect the removed constructor.
To resolve this issue:
Downgrade Microsoft.IdentityModel.Tokens
Change your project's dependency to use Microsoft.IdentityModel.Tokens version 8.11.x (or any version before 8.12.1). This will restore the missing method and resolve the exception.
In your .csproj or via your package manager:
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="8.11.2" />
Clear NuGet Cache and Rebuild
After downgrading, clear your NuGet cache and perform a clean rebuild to ensure the correct version is used throughout your solution.
Monitor Upstream Fixes
The issue is upstream and tracked by Microsoft. You can follow the official remediation and future releases here:
Wait for ABP/Upstream Updates
Once Microsoft and/or ABP update their dependencies to a fixed version, you can safely upgrade again.
This is not an ABP-specific bug, but a result of a breaking change in a Microsoft dependency.
Sources:
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
This behavior is related to how the LeptonX Angular theme (and many responsive Angular applications) handle viewport changes. When the browser window is resized and crosses the mobile breakpoint, Angular components may be destroyed and re-initialized, causing dialogs and their state to be lost. This is a known limitation of the current LeptonX Angular theme implementation.
To mitigate this issue, you can:
Use Angular's dialog data persistence:
Prevent dialog destruction on viewport change:
Consider providing user warnings:
Currently, there is no official ABP or LeptonX Angular configuration to automatically persist dialog state or prevent this loss of data when switching between desktop and mobile layouts. This is a limitation of the responsive design and Angular's component lifecycle.
If this is a critical issue for your application, you may consider opening a feature request on the official ABP GitHub repository or implementing a custom dialog state persistence mechanism.
Sources:
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
The ABP Platform v9.3 stable release is planned for July 2025. This is the official target date according to the ABP Framework roadmap. You can follow the roadmap for any updates or changes to the release schedule.
Sources:
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
You can securely submit your logs and request support through the official ABP support portal: https://abp.io/support
Please log in with your account, create a support ticket, and attach your logs there. The ABP support team will review your issue and assist you as soon as possible.
If you need guidance on what logs to collect or how to prepare them, please specify, and I can provide detailed instructions.
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
To ensure the Inbox pattern works reliably in your ABP microservice architecture, consider the following:
Recommendations:
Ensure that your event handler logic is wrapped in a transaction that includes both the SQL Server and MongoDB operations (if possible). If not, handle failures in MongoDB by throwing exceptions before the SQL Server transaction commits.
The ABP Inbox processor should only mark events as processed after the handler completes without exceptions. If you see the Processed flag set without handler invocation, check for:
Review your configuration to ensure the Inbox is set up on the correct DbContext and that only one processor is polling the inbox table.
For reliable retry logic, do not catch and suppress exceptions in your event handler. Let them bubble up so the ABP infrastructure can retry the event.
Example Configuration:
Configure<AbpDistributedEventBusOptions>(options =>
{
options.Inboxes.Configure(config =>
{
config.UseDbContext<YourSqlServerDbContext>();
// Optionally, set polling interval, batch size, etc.
});
});
References:
If you follow these guidelines and ensure that exceptions are not suppressed, the ABP Inbox pattern will only mark events as processed after successful handling, and failed events will be retried as expected.
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.