The root cause of your time conversion issue is the inconsistent configuration of AbpClockOptions between your MVC Web Application and your microservices. In your WebModule, you have set:
Configure<AbpClockOptions>(options =>
{
options.Kind = DateTimeKind.Local;
});
while in your DemoServiceModule, you have:
Configure<AbpClockOptions>(options =>
{
options.Kind = DateTimeKind.Utc;
});
This means your MVC UI is storing and interpreting DateTime values as "Local" (server time), but your microservices are using "UTC". In a distributed (microservices) environment, especially when running in containers (like Kubernetes), this will cause time drift and conversion errors, because each container/server may have a different local time or timezone configuration.
ABP recommends always using DateTimeKind.Utc
for all services and UIs, and handling user time zone conversion at the UI or API boundary. This ensures all times are stored and transferred in UTC, and only converted to the user's time zone for display or input.
To fix this:
AbpClockOptions.Kind = DateTimeKind.Utc
in all your modules (Web, API, microservices).IClock.ConvertToUserTime
, IClock.ConvertToUtc
) to convert between UTC and user time zone when displaying or accepting input.timestamp with time zone
if you need to store offsets.For more details and best practices, see:
This approach will resolve the time drift and ensure consistent time handling across your distributed ABP application.
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.
If your ABP account is locked and you are unable to log in, you should follow these steps:
You can reach out to ABP support via their official support page or by emailing info@abp.io for assistance with account unlocking.
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 warning The localization source separator (::) not found.
and the display of LongWelcomeMessage
as a literal string indicate that the Angular localization key is not being resolved. This usually means the resource or key is not registered or loaded correctly in your Angular app.
In ABP Angular, localization keys must be referenced as ResourceName::Key
. For example:
{{ 'MyProjectName::LongWelcomeMessage' | abpLocalization }}
You must also ensure that the resource and key are registered in your Angular module. In your app.module.ts
, you should have something like:
import { provideAbpCore, withOptions } from '@abp/ng.core';
@NgModule({
providers: [
provideAbpCore(
withOptions({
localizations: [
{
culture: 'en',
resources: [
{
resourceName: 'MyProjectName',
texts: {
"LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information visit"
}
}
]
}
]
}),
),
],
})
export class AppModule {}
If you only use backend localization, ensure the backend returns the correct resource and key, and that the Angular app is configured to use it.
Double-check that the resource name and key match exactly, and that you are using the correct separator (::
).
If you recently upgraded, compare your app.module.ts
and localization configuration with a fresh ABP template for your version, as breaking changes or template changes may have occurred.
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.
This error (startIndex ('-1') must be a non-negative value. (Parameter 'startIndex')
) is a known issue that can occur in ABP Suite's CRUD Page Generator, especially after upgrades or when working with certain project/module configurations. It is typically caused by Suite failing to parse or locate expected code patterns in your DbContext or related files, often due to:
Check Your DbContext for Duplicates or Irregularities
DbSet
properties or malformed code in your DbContext
file.public DbSet<MyEntity> MyEntities { get; set; }
public DbSet<MyEntity> MyEntities { get; set; } // Duplicate!
Revert Manual Changes
Update ABP Suite
Remove and Re-Add Solution in Suite
Check Module Support
SaasService
, IdentityService
, AdministrationService
). If you are targeting these, code generation may not work as expected.Check for Known Issues
Try with a Clean Project
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.
In ABP Blazor WebAssembly multi-tenant setups using subdomains, if logging into one tenant also authenticates you in all tenants (and host), the root cause is typically the authentication cookie's domain scope. By default, cookies are set for the parent domain (e.g., .local.test
), making them accessible to all subdomains, which results in shared authentication across tenants.
To ensure tenant isolation, you must configure the authentication cookie to be scoped to each subdomain (tenant) rather than the parent domain. In Blazor WASM, this is handled by the OIDC provider and the backend's cookie settings.
Solution Steps:
Set Cookie Domain Per Subdomain:
t1.local.test
, t2.local.test
) instead of .local.test
.Configure<CookieAuthenticationOptions>(IdentityConstants.ApplicationScheme, options =>
{
options.Cookie.Domain = null; // Do not set to .local.test
});
options.Cookie.Domain = null
, the cookie will be scoped to the current subdomain.OIDC Redirect URIs:
appsettings.json
for each client:
"RootUrl": "https://{0}.local.test:44334"
Blazor WASM RemoteServices Configuration:
Authority
and BaseUrl
to include the current tenant subdomain at runtime, as described in Step 5 of the referenced guide.Clear Cookies and Test:
Summary:
The issue is caused by the authentication cookie being shared across subdomains. Scoping the cookie to each subdomain resolves the problem and ensures proper tenant isolation.
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 request a reimbursement for an unwanted ABP Commercial renewal and to inquire about deleting your organization account, you should contact the ABP support team directly. There is no self-service option for deleting organization accounts or handling billing issues via the user interface.
Please use one of the following official channels:
Provide your organization details and explain your situation for a prompt resolution.
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 CMS Kit does not provide an automatic mechanism to clean up or remove unused images that were previously uploaded and are no longer referenced in blog posts or pages. Uploaded files remain in storage even if they are not used in any content, which can lead to accumulation of unused images over time.
To handle this issue, you would need to implement a custom solution. A typical approach is:
This process requires custom development, as the CMS Kit does not include built-in support for orphaned file cleanup.
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 error [Invalid Module] Backend module "document" does not exist in API definition.
indicates that the ABP CLI is trying to generate proxies for a module ("document") that is not present in the API definition exposed by your backend at the specified URL.
This issue can occur if:
-url http://localhost:44319
and -m artificialintelligence
) does not expose the "document" module in its API definition./api/abp/api-definition?includeTypes=true
) is returning information about both microservices, but one of them is not running or not properly configured.Ensure Both Microservices Are Running
Check API Definition
http://localhost:44319/api/abp/api-definition?includeTypes=true
in your browser or use a tool like Postman to verify which modules are exposed. Ensure "artificialintelligence" is present and "document" is not erroneously referenced.Check CLI and Schematics Versions
@abp/ng.schematics" version is lower than ABP Cli version
suggests a version mismatch. Update both the ABP CLI and @abp/ng.schematics
to the latest compatible versions:
dotnet tool update -g Volo.Abp.Cli
npm install @abp/ng.schematics@latest --save-dev
Specify the Correct Module
-m
. It must match exactly as exposed in the API definition.Clean and Rebuild
If Using ABP Studio
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 fix the issue with displaying inherited permissions at the user level in the UI, you need to ensure that the Angular Permission Management UI is aware of your custom permission value provider and can reflect the effective permissions (including those inherited from host-level/global roles). The default ABP Permission Management UI only displays permissions that are directly granted to the user or their tenant roles. It does not natively aggregate or display permissions granted via custom/global logic unless you extend the backend Permission Management AppService to include these in the returned permission data. You should override or extend the Permission Management AppService (e.g., PermissionAppService) to merge the effective permissions from your GlobalPermissionValueProvider into the Permission Management DTOs returned to the UI. This way, the UI can display the correct checked/disabled state for inherited/global permissions.
There is no built-in, standard ABP way to implement host-level roles that are assignable to tenant users and have their permissions inherited across tenants. The approach you have taken—using a custom PermissionValueProvider and disabling the IMultiTenant filter to check host-level roles—is the recommended extensibility point for this scenario. However, for a more maintainable and standard approach:
Sources:
This approach aligns with ABP's extensibility model for permissions, but the UI must be updated to reflect the effective permission state.
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.
~/.abp/studio/ui/logs
and ~/.abp/studio/ui/cache
.NuGet.config
file (see the official NuGet config documentation for locations).If the issue continues, please check the log files in ~/.abp/studio/ui/logs
for any error details and share them with the ABP support team for further investigation.
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.