To resolve the "Error while checking license in Abp Suite" as described in question #9678, follow these steps:
abp login <your-username>
access-token.bin
) to the target environment:
%UserProfile%\.abp\cli\access-token.bin
/home/<user>/.abp/cli/access-token.bin
AbpLicenseCode
in your configuration, ensure it is correctly set as an environment variable or in your appsettings.json
file, and that there are no extra spaces or line breaks.If the problem persists, refer to the official support thread for additional troubleshooting steps:
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 No connection could be made because the target machine actively refused it. (localhost:44371)
indicates that your application is trying to connect to an OpenID Connect authority at https://localhost:44371/.well-known/openid-configuration
, but nothing is running on that address/port.
In a tiered ABP solution, the .Web
and .HttpApi.Host
projects typically use the .AuthServer
project as the OpenID Connect authority. If the .AuthServer
is not running, or if the Authority
URL in your configuration points to the wrong address, you will get this error.
How to fix:
Start the AuthServer
.AuthServer
project is running and accessible at the URL specified in your configuration (e.g., https://localhost:44371
).Check Configuration
.Web
and .HttpApi.Host
projects, verify the AuthServer:Authority
setting in appsettings.json
or appsettings.Development.json
:"AuthServer": {
"Authority": "https://localhost:44371",
"RequireHttpsMetadata": "false"
}
.AuthServer
project.Check Launch Settings
Properties/launchSettings.json
of the .AuthServer
project, confirm the application is set to launch on the correct port (44371).Run All Projects
.AuthServer
, .HttpApi.Host
, and .Web
projects simultaneously. If using Visual Studio, set them all as startup projects.Firewall/Port Conflicts
Production/Containerized Environments
Authority
URL is set to the deployed AuthServer's public address, not localhost
.Summary:
This error is caused by the .Web
or .HttpApi.Host
project being unable to reach the .AuthServer
at the configured URL. Make sure the AuthServer is running and the configuration matches its actual address.
No validated 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.
To obtain the VAT number required for your ABP.IO license renewal and online purchase from Saudi Arabia, you should contact the ABP.IO sales or support team directly. They will provide the official VAT number for your invoice, which you can then verify on the ZATCA website.
Please use the official contact form to request the VAT number:
Alternatively, you can review licensing and purchase details here:
These are the official channels for handling VAT and invoicing queries for ABP.IO purchases.
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.
System.ObjectDisposedException
with Autofac's LifetimeScope
in ABP Blazor applications typically occurs when a service or DbContext is accessed after its DI scope has been disposed. This is often seen under load or with improper async usage.Common Causes and Solutions:
Async/Await Pitfalls:
await
async methods, especially in event handlers, background jobs, or distributed event handlers.Manual Service Scope Management:
using
statements; let the DI container manage their lifetimes.Unit of Work (UoW) Usage:
IUnitOfWorkManager
.[UnitOfWork(isTransactional: false)]
on your method.Blazor Component Lifetimes:
Example: Proper Async Usage in Event Handlers
public async Task HandleEventAsync(MyEventData eventData)
{
// Always await async operations
await _myService.DoSomethingAsync(eventData);
}
Example: Manual UnitOfWork Management
using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: false))
{
// ... your logic here
await uow.CompleteAsync();
}
Checklist:
If the problem persists under load:
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.
To report and correct translation issues in commercial modules like Account Pro, you need to request the localization files from the ABP team, as these files are not publicly available. Please create an issue on the ABP Framework GitHub repository specifying the module and language. The team will provide you with the necessary abp-translation.json
file(s) for the module, which you can then review and correct. After making your corrections, you can submit them back to the team for inclusion in future releases.
Source:
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 files uploaded programmatically are downloadable via the ABP File Management module, you must follow the same conventions and requirements as the module itself. Here are the key points and a step-by-step solution:
FileDescriptor Creation: You are correctly creating and saving the FileDescriptor
entity and storing the file in the blob container. However, the File Management module expects certain fields and relationships to be set properly, and the upload process should match the module's logic.
Directory and Tenant Consistency: Make sure the directoryId
you assign is valid and exists in the DirectoryDescriptor
table for the current tenant. If the directory is not found or not associated with the correct tenant, the UI may not display or allow downloads.
Blob Storage Key: The blob is saved with fileDescriptor.Id.ToString()
. This is correct, as the module uses the file's GUID as the blob key.
Download Token Requirement: The File Management module uses a download token for security. The download process is:
Common Issues:
FileDescriptor
is correctly linked to the directory and tenant.Recommended Approach: Instead of manually inserting the FileDescriptor
and saving the blob, use the File Management module's application service (e.g., FileDescriptorAppService
) to upload files. This ensures all business logic, validation, and events are handled.
Example (pseudo-code):
// Inject IFileDescriptorAppService
var input = new CreateFileInputWithStream
{
DirectoryId = directoryId,
Name = file.Name,
MimeType = file.MimeType,
Content = new MemoryStream(file.Content)
};
await _fileDescriptorAppService.CreateAsync(input);
If you must do it manually, double-check all fields and ensure the tenant context is correct.
FileDescriptor
and DirectoryDescriptor
records.By following the above steps and using the module's services where possible, you will ensure compatibility with the File Management module's download process.
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.
To ensure your Blazor WASM app always serves appsettings.json from wwwroot (not from the ABP Virtual File System), especially when using app.UsePathBase for a subfolder (e.g., "/Blazor"), follow these steps:
app.UseStaticFiles(); // This serves files from wwwroot, including appsettings.json
app.MapAbpStaticAssets(); // This serves ABP static/virtual files
The order is important: UseStaticFiles should come before MapAbpStaticAssets.
fetch('./appsettings.json')
or, if you use a base tag in your index.html:
<base href="/Blazor/">
then
fetch('appsettings.json')
If you dynamically generate appsettings.json at runtime, ensure your deployment process writes it to wwwroot before the app starts.
If you use a subfolder (path base), make sure all static file requests (including appsettings.json and font files) are prefixed with the base path.
If you see JSON parsing errors, verify that the appsettings.json file is present, accessible, and contains valid JSON. A 404 or empty file will cause the error you see.
This approach ensures your appsettings.json is always served from wwwroot, not from the virtual file system, and works with dynamic updates and subfolder hosting.
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.
To ensure that changes in user roles and permissions are reflected immediately—without requiring the user to log out and log in again—you should enable ABP's dynamic claims feature. By default, claims in the authentication token or cookie are static and only refreshed upon re-authentication. The dynamic claims feature allows ABP to override the claims in the user's token/cookie with the latest values on every request, so changes (like role removals or additions) take effect immediately.
How to enable dynamic claims:
YourProjectNameHttpApiHostModule
).ConfigureServices
method, add:Configure<AbpDynamicClaimsOptions>(options =>
{
options.IsEnabled = true;
});
With this enabled, any changes to user roles or permissions will be reflected on the next request, and users will not need to log out and log in again to see updated access.
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.
To remove the lpx-menu-filter
(the menu filter/search box) from the LeptonX Lite Angular side navigation, you need to customize or replace the sidebar component. ABP's LeptonX theme allows you to replace built-in components with your own.
Here’s how you can achieve this:
Create a Custom Sidebar Component
CustomSidebarComponent
) that does not include the menu filter element.Register Your Component as a Replacement
app.module.ts
), use the replaceableComponents
provider to replace the default sidebar (navbar) with your custom component.Example:
import { eThemeLeptonXComponents } from '@abp/ng.theme.lepton-x';
// In your module's providers array
this.replaceableComponents.add({
component: CustomSidebarComponent,
key: eThemeLeptonXComponents.Navbar,
});
Remove the Filter/Search Box
Rebuild and Run
This approach ensures you have full control over the sidebar's content and appearance.
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.
To integrate LDAP (Active Directory) authentication in an ABP MVC Core Razor application, follow these steps:
Install the necessary NuGet package:
Volo.Abp.Account.Pro.Ldap
package to your project.Configure LDAP settings in your appsettings.json
:
"Ldap": {
"IsEnabled": "true",
"Domain": "your-domain",
"UserName": "ldap-user",
"Password": "ldap-password",
"ServerHost": "your-ldap-server",
"ServerPort": "389"
}
Enable the LDAP login feature:
Account.EnableLdapLogin
feature for the relevant tenant or host.Test your LDAP configuration:
Clear the cache if you change feature settings to ensure the new configuration is applied.
After these steps, users will be able to log in using their Active Directory credentials.
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.