/api/abp/application-localization requires the cultureName querystring parameter. If it’s missing (or empty), ABP validates the DTO and returns 400 with: “The CultureName field is required.” (exactly what your AdministrationService log shows: CultureName=).PublicWeb/Web fetches localization at startup via MvcCachedApplicationConfigurationClient → AbpApplicationLocalizationClientProxy.GetAsync(...). In your environment, the request ends up as CultureName= (empty), so the UI app fails to boot.Apply one of the following definitive fixes (the first is the recommended one):
In Kubernetes / ingress / reverse-proxy setups, the request culture is typically resolved from one of these:
Accept-Language headercultureName, ui-culture, etc.)Your log shows the UI is calling the gateway with ...?* and the downstream call becomes CultureName=. That strongly indicates the culture information is not being forwarded/preserved by the gateway/proxy layer.
Fix: configure the gateway/ingress so it does not drop the Accept-Language header and does not strip query strings. Concretely:
Accept-Language end-to-end.After that, ABP will be able to resolve culture and will call:
/api/abp/application-localization?cultureName=en... instead of CultureName=.
As a fallback, configure a default request culture for the MVC UI so it never ends up sending an empty culture to the backend.
In your PublicWeb and Web module (the module that configures localization), set a default culture (example en):
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Localization;
using System.Globalization;
using Volo.Abp.Modularity;
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.Configure<RequestLocalizationOptions>(options =>
{
var defaultCulture = new CultureInfo("en");
options.DefaultRequestCulture = new RequestCulture(defaultCulture);
options.SupportedCultures ??= new List<CultureInfo>();
options.SupportedUICultures ??= new List<CultureInfo>();
if (!options.SupportedCultures.Any(c => c.Name == "en"))
options.SupportedCultures.Add(defaultCulture);
if (!options.SupportedUICultures.Any(c => c.Name == "en"))
options.SupportedUICultures.Add(defaultCulture);
});
}
This prevents CultureName from being empty even when upstream culture detection fails.
You can alter validation behavior, but this changes ABP’s standard API contract and is not recommended compared to fixing culture forwarding/default culture.
(Also note) the warning Could not find IdentityClientConfiguration for AbpMvcClient is a separate configuration issue (identity client config), not the cause of the CultureName validation error.
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.
Themes/LeptonX folder under AuthService is a copy of LeptonX MVC Razor view/component overrides from your old ABP 8 setup. After upgrading to ABP 10, the LeptonX MVC theme package you now reference no longer contains the same MVC component namespaces/types you were overriding (so imports like below break because the underlying type is gone/renamed/moved in newer LeptonX):@using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonX.Themes.LeptonX.Components.SideMenu.MobileNavbar
@model MobileNavbarViewModel
Do not try to “download LeptonX 5.1.1 source” via abp list-modules. abp list-modules lists ABP modules/templates, not the internal source of the commercial LeptonX MVC theme. Also, the LeptonX MVC theme source is not available through the public GitHub index I can search here, so I can’t provide a verified “download source code for 5.1.1” instruction.
The correct fix is:
AuthService/Themes/LeptonX) or stop compiling it (exclude from project).To keep your custom login UI without the old copied theme folder:
...Components.SideMenu.MobileNavbar) that no longer match.If your goal is exactly “keep the old LeptonX look”, then the only reliable way is to upgrade your copied Razor files to match the new LeptonX MVC API surface. Practically:
About “If I remove Themes folder, Login page UI is totally changed”:
Links (validated):
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 10.1.1, the .DbMigrator output you shared (it stops right after “Creating initial migration…” and returns exit code 0) typically means the “create initial migration” step didn’t actually scaffold any EF Core migration, so the migrator ends without applying anything (no error is thrown, so the process exits successfully).
Fix it by creating/applying the initial EF Core migration manually (this bypasses the Studio/CLI “create initial migration” wrapper and makes the failure visible if there is any design-time DbContext issue):
Open a terminal in your *.EntityFrameworkCore project folder.
Run Add Migration (use your actual DbContext name):
dotnet ef migrations add Initial --context YourProjectDbContext
dotnet ef database update --context YourProjectDbContext
.DbMigrator project again. It should now apply migrations + seed data normally.Links (validated):
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.
No provider found for InjectionToken CORE_OPTIONS (used by @abp/ng.oauth’s OAuthConfigurationHandler) means Angular is loading ABP code that tries to inject(CORE_OPTIONS) but the token instance that was provided by CoreModule.forRoot(...) is not the same token instance that @abp/ng.oauth is injecting.In practice, this almost always happens when your workspace ends up with two physical copies / entry points of ABP Angular packages (or they’re resolved from the wrong place). Then:
CoreModule.forRoot() provides CORE_OPTIONS (copy A)@abp/ng.oauth injects CORE_OPTIONS (copy B)In an Nx / monorepo, check your tsconfig.base.json (and any app-level tsconfig) for any paths mapping that touches @abp/* or @volo/* or redirects modules to local sources.
Apply this in the app tsconfig that builds/runs (or tsconfig.base.json), so ABP always resolves from node_modules:
{
"compilerOptions": {
"paths": {
"@abp/*": ["node_modules/@abp/*"],
"@volo/*": ["node_modules/@volo/*"]
}
}
}
Then do a clean install:
rm -rf node_modules package-lock.json yarn.lock
npm install
This addresses both the original RestService issue and the current CORE_OPTIONS issue (they’re symptoms of the same duplication/resolution problem).
CoreModule.forRoot(...) in the root module only (you already did)Your updated AppModule import order is fine. The key rule is:
CoreModule.forRoot({ environment, registerLocaleFn }) must be executed once (root module)forRoot() again.You mentioned “Angular 20” initially, but your package.json shows Angular 21.0.0. Running ABP 10.2.0 with Angular 21 increases the chance of hitting build/runtime incompatibilities and dependency duplication issues. The safest route is to keep Angular at the version ABP 10.x templates target, or upgrade ABP packages to a version that officially targets your Angular major.
(There isn’t a single “NgModule vs standalone” requirement here; the error is DI token duplication, not the bootstrap style.)
If you apply step (1) and clean reinstall, CORE_OPTIONS should resolve and the app should pass this startup stage.
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.
*.Application, sometimes *.HttpApi.Host depending on your module graph), add an explicit package reference to a patched AutoMapper version so NuGet resolves your version instead of the transitive one:<ItemGroup>
<PackageReference Include="AutoMapper" Version="15.1.1" />
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="15.1.1" />
</ItemGroup>
dotnet list package --include-transitive).Configuration-based mitigation in ABP specifically: ABP uses AutoMapper via its integration package, but I could not find (in verified ABP sources available to me) an ABP-provided setting like “limit mapping depth” that you can flip to mitigate the specific AutoMapper recursion DoS issue. The reliable mitigation here is overriding to a fixed AutoMapper version.
select2@4.0.13 would be coming from in an ABP React 8.2.3 solution.
However, if your scanner reports it as transitive, the standard mitigation on the React/npm side (without any ABP upgrade) is to force/override the dependency version at the package manager level:
overrides):{
"overrides": {
"select2": "4.1.0-rc.0"
}
}
resolutions):{
"resolutions": {
"select2": "4.1.0-rc.0"
}
}
Then reinstall (rm -rf node_modules package-lock.json and npm install, or the equivalent for yarn/pnpm) and re-check the lockfile.
Important note about your reported Select2 advisory: your message says “versions prior to 4.0.8 are vulnerable”, but you have 4.0.13, which is not “prior to 4.0.8”. So either:
The practical, framework-independent mitigation remains: ensure the lockfile resolves to a non-vulnerable version and avoid using HTML templates with untrusted remote data.
PackageReference, npm via overrides/resolutions).Select(...) / query projection) over deep object graph mapping when feasible to reduce risk and cost of mapping large/deep graphs.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.
dotnet tool update -g Volo.Abp.Cli
# (or first time)
dotnet tool install -g Volo.Abp.Cli
.sln is), run:abp update
This updates all ABP-related NuGet and NPM packages in the solution.
Rebuild and then check the official upgrading notes for version-specific/manual steps (breaking changes, migrations, etc.):
If you only want to update NPM packages (Angular UI), you can run the update command with the --npm option (supported by the ABP CLI):
abp update --npm
Notes:
abp update targets ABP packages. For non-ABP NuGet packages, use standard .NET tooling (e.g., dotnet list package --outdated and update as needed), but keep ABP packages on consistent versions.https://docs.abp.io/en/abp/latest/CLI
https://abp.io/docs/latest/cli
https://abp.io/docs/latest/release-info/upgrading
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.
bootstrapApplication) just to fix this. ABP Angular packages still work with NgModule-based apps.RestService is already provided in root, so NG0201: No provider found for RestService typically indicates the @abp/* packages are not being resolved/loaded correctly, or ABP’s core options/providers are not actually being registered due to build/package resolution issues.Keep CoreModule.forRoot(...) only in a module that is imported by AppModule (directly or through your AbpModule) and make sure it is not imported again elsewhere.
Your AbpModule approach is OK, but make sure other feature/shared modules don’t import CoreModule again (they should import CoreModule without forRoot, or not import it at all if not needed).
paths overriding @abp/*After upgrades, a very common reason for ABP DI tokens/providers not being found is that your tsconfig*.json contains paths mappings that cause @abp/* (and/or @volo/*) to resolve to something other than node_modules (e.g., a local projects/* folder, old source copies, monorepo mappings, etc.).
Add (or override) these mappings in the tsconfig used by the Angular app that runs (often tsconfig.app.json or apps/<app>/tsconfig.json):
{
"compilerOptions": {
"paths": {
"@abp/*": ["node_modules/@abp/*"],
"@volo/*": ["node_modules/@volo/*"]
}
}
}
Then clean + reinstall:
rm -rf node_modules package-lock.json yarn.lock
npm install # or yarn
npm start
This ensures Angular resolves @abp/ng.core from the installed package (where RestService is registered), not from an unintended location.
Make sure all @abp/* and @volo/* packages are on the same ABP minor/patch line (don’t mix different 10.x.y versions). Mixed versions can cause DI/provider graph mismatches at runtime.
If you apply (2) + clean install, this usually resolves “No provider found for RestService” symptoms in Angular 20 upgrades.
Links:
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.
IBackgroundJob<TArgs> implementation when you use the Default Background Job Manager.IsAbandoned) rather than trying to infer it inside the job.Attempt and MaxAttempts = 10.ExecuteAsync, wrap your logic in try/catch:
Attempt < MaxAttempts, enqueue the same job again with Attempt + 1 (optionally with delay).Attempt == MaxAttempts, insert a row into your custom table (FailedJobs table) and stop re-enqueuing.Example skeleton:
public class MyJobArgs
{
public int Attempt { get; set; } = 1;
public int MaxAttempts { get; set; } = 10;
public Guid BusinessId { get; set; }
}
public class MyJob : IBackgroundJob<MyJobArgs>
{
private readonly IBackgroundJobManager _backgroundJobManager;
private readonly IFailedJobRepository _failedJobRepository; // your table/repo
public MyJob(
IBackgroundJobManager backgroundJobManager,
IFailedJobRepository failedJobRepository)
{
_backgroundJobManager = backgroundJobManager;
_failedJobRepository = failedJobRepository;
}
public async Task ExecuteAsync(MyJobArgs args)
{
try
{
// Do work...
}
catch (Exception ex)
{
if (args.Attempt >= args.MaxAttempts)
{
await _failedJobRepository.InsertAsync(new FailedJob(
args.BusinessId,
args.Attempt,
ex.ToString(),
args // store serialized args so UI can re-run
));
return;
}
await _backgroundJobManager.EnqueueAsync(
new MyJobArgs
{
BusinessId = args.BusinessId,
Attempt = args.Attempt + 1,
MaxAttempts = args.MaxAttempts
},
delay: TimeSpan.FromMinutes(1) // choose your backoff strategy
);
throw; // keep ABP logging behavior for the current failure
}
}
}
If you are using Hangfire integration as the background job manager, Hangfire itself tracks retry attempts, but that is Hangfire-specific (not ABP’s default job manager abstraction). In that case you’d typically implement your “moved to failed table after retries” using Hangfire filters/continuations rather than ABP’s default job storage.
Sources (verified):
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.
Your screenshot shows the app trying to load bootstrap.bundle.min.js.map, bootstrap.min.css.map, and dotnet.runtime*.js.map and getting 404. These .map files are source maps used only for debugging. They are not required for offline/PWA runtime. You can ignore these warnings, or disable source-map generation in your build pipeline if you don’t want the console noise.
The real problem in the screenshot is this runtime error:
WebAssembly.Compile is disallowed on the main thread if the buffer size is larger than 4KB ...
This typically happens when the browser blocks synchronous WASM compilation on the main thread (often due to browser/runtime constraints). In an offline/PWA scenario, this is frequently triggered by an incorrect or incomplete service-worker cache, where some of the Blazor runtime files (dotnet.native*.wasm, dotnet.runtime*.js, dlls, etc.) are served from cache in an unexpected way/version mismatch.
wwwroot/service-worker.jswwwroot/service-worker.published.js*.Blazor.Client.csproj includes:<PropertyGroup>
<ServiceWorkerAssetsManifest>service-worker-assets.js</ServiceWorkerAssetsManifest>
</PropertyGroup>
<ItemGroup>
<ServiceWorker Include="wwwroot\service-worker.js"
PublishedContent="wwwroot\service-worker.published.js" />
</ItemGroup>
Ensure your published service worker caches the required Blazor assets
Use the standard service-worker.published.js pattern (the important part is that it caches .dll, .wasm, .js, .json, .css, etc. from service-worker-assets.js). ABP docs include the canonical version; make sure yours matches that behavior.
After deploying changes, force a clean service-worker update
Verify the app is actually caching the Blazor runtime
offline-cache-* entriesindex.htmlservice-worker-assets.jsdotnet.native*.wasmdotnet.runtime*.js*.dllIf you do the above and offline still fails with the same WebAssembly.Compile... error, then your service-worker.published.js is almost certainly serving a stale/incorrect cached runtime asset (version mismatch). The “unregister + clear site data” step resolves that in most cases.
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 is expected behavior and usually happens due to cold start + first-time client initialization:
/api/abp/application-configuration to get localization, permissions, settings, current user, etc.What you should do (practical checklist):
/api/abp/application-configuration → it’s backend initialization/cache building.If the slow request is application-configuration specifically:
References (verified):
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.