Open Closed

Volo.Abp.Http.Client.AbpRemoteCallException: Your request is not valid! #10563


User avatar
0
consultant.ahmet.ulusoy created
  • Template: microservice
  • Created ABP Studio Version: 1.3.2
  • Current ABP Studio Version: 2.2.4
  • Multi-Tenancy: Yes
  • UI Framework: mvc
  • Theme: leptonx
  • Theme Style: system
  • Theme Menu Placement: side
  • Database Provider: ef
  • Database Management System: postgresql
  • Mobile Framework: react-native
  • Public Website: Yes
  • Social Login: Yes
  • Include Tests: Yes
  • Dynamic Localization: Yes
  • Kubernetes Configuration: Yes
  • Grafana Dashboard: Yes
  • Use Local References: No
  • Aspire: Yes
  • Optional Modules:
    • GDPR
    • FileManagement
    • TextTemplateManagement
    • AuditLogging
    • Chat
    • OpenIddictAdmin
  • Selected Languages: English, Arabic, Chinese (Simplified), Chinese (Traditional), Czech, English (United Kingdom), Finnish, French, German (Germany), Hindi , Hungarian, Icelandic, Italian, Portuguese (Brazil), Romanian (Romania), Russian, Slovak, Spanish, Swedish, Turkish
  • Default Language: English
  • Create Command: abp new TavTechnologies.Treva -t microservice --ui-framework mvc --mobile react-native --database-provider ef --database-management-system postgresql --theme leptonx --skip-migrator --public-website --dont-run-bundling -no-language-management -chat -file-management

Dear Abp,

We have problems on microk8s after upgrade to dotnet 10.

Because of some reason PublicWeb and Web projects in microservice solution sends a request without CultureName and microservices gives error there fore PublicWeb and Web can't start properly.

The given error is like that

[21:48:41 INF] Starting TavTechnologies.Treva.Web.Public [21:48:44 INF] Initialized all ABP modules. [21:48:44 INF] Initializing UI Database [21:48:45 INF] Saving healthchecks configuration to database [21:48:45 WRN] Overriding HTTP_PORTS '8080' and HTTPS_PORTS ''. Binding to values defined by URLS instead 'http://+:8080'. [21:48:45 INF] Now listening on: http://[::]:8080 [21:48:45 INF] Start processing HTTP request GET http://localhost:8080/health-status [21:48:45 INF] Sending HTTP request GET http://localhost:8080/health-status [21:48:45 INF] Application started. Press Ctrl+C to shut down. [21:48:45 INF] Hosting environment: Staging [21:48:45 INF] Content root path: /app [21:48:45 INF] Request starting HTTP/1.1 GET http://localhost:8080/health-status - null null [21:48:46 WRN] Could not find IdentityClientConfiguration for AbpMvcClient. Either define a configuration for AbpMvcClient or set a default configuration. [21:48:46 INF] Start processing HTTP request GET http://treva-publicgateway/api/abp/application-configuration?* [21:48:46 WRN] Could not find IdentityClientConfiguration for AbpMvcClient. Either define a configuration for AbpMvcClient or set a default configuration. [21:48:46 INF] Start processing HTTP request GET http://treva-publicgateway/api/abp/application-localization?* [21:48:46 INF] Sending HTTP request GET http://treva-publicgateway/api/abp/application-localization?* [21:48:46 INF] Sending HTTP request GET http://treva-publicgateway/api/abp/application-configuration?* [21:48:46 INF] Received HTTP response headers after 23.2122ms - 400 [21:48:46 INF] Execution attempt. Source: '-standard//Standard-Retry', Operation Key: 'null', Result: '400', Handled: 'False', Attempt: '0', Execution Time: 35.827ms [21:48:46 INF] End processing HTTP request after 60.8145ms - 400 [21:48:46 INF] Received HTTP response headers after 226.2825ms - 200 [21:48:46 INF] Execution attempt. Source: '-standard//Standard-Retry', Operation Key: 'null', Result: '200', Handled: 'False', Attempt: '0', Execution Time: 235.9117ms [21:48:46 INF] End processing HTTP request after 236.9095ms - 200 [21:48:46 ERR] Connection id "0HNKH06EQOCQC", Request id "0HNKH06EQOCQC:00000001": An unhandled exception was thrown by the application. Volo.Abp.Http.Client.AbpRemoteCallException: Your request is not valid! at Volo.Abp.Http.Client.ClientProxying.ClientProxyBase`1.ThrowExceptionForResponseAsync(HttpResponseMessage response) at Volo.Abp.Http.Client.ClientProxying.ClientProxyBase`1.RequestAsync(ClientProxyRequestContext requestContext) at Volo.Abp.Http.Client.ClientProxying.ClientProxyBase`1.RequestAsync[T](ClientProxyRequestContext requestContext) at Volo.Abp.Http.Client.ClientProxying.ClientProxyBase`1.RequestAsync[T](String methodName, ClientProxyRequestTypeValue arguments) at Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClientProxies.AbpApplicationLocalizationClientProxy.GetAsync(ApplicationLocalizationRequestDto input) at Volo.Abp.AspNetCore.Mvc.Client.MvcCachedApplicationConfigurationClient.GetRemoteConfigurationAsync() at Volo.Abp.AspNetCore.Mvc.Client.MvcCachedApplicationConfigurationClient.&lt;GetAsync>b__23_0() at Volo.Abp.Caching.DistributedCache`2.GetOrAddAsync(TCacheKey key, Func`1 factory, Func`1 optionsFactory, Nullable`1 hideErrors, Boolean considerUow, CancellationToken token) at Volo.Abp.AspNetCore.Mvc.Client.MvcCachedApplicationConfigurationClient.GetAsync() at Volo.Abp.AspNetCore.Mvc.Client.RemoteLanguageProvider.GetLanguagesAsync() at Microsoft.AspNetCore.RequestLocalization.DefaultAbpRequestLocalizationOptionsProvider.GetLocalizationOptionsAsync() at Microsoft.AspNetCore.RequestLocalization.AbpRequestLocalizationMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<&lt;CreateMiddleware>b__0>d.MoveNext() --- End of stack trace from previous location --- at Volo.Abp.AspNetCore.Mvc.Libs.AbpMvcLibsService.&lt;CheckLibs>b__1_0(HttpContext httpContext, RequestDelegate next) at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application) [21:48:46 INF] Received HTTP response headers after 546.9353ms - 500 [21:48:46 INF] Request finished HTTP/1.1 GET https://localhost:8080/health-status - 500 0 null 502.2009ms [21:48:46 WRN] Execution attempt. Source: '-standard//Standard-Retry', Operation Key: 'null', Result: '500', Handled: 'True', Attempt: '0', Execution Time: 571.0535ms [21:48:46 WRN] Resilience event occurred. EventName: 'OnRetry', Source: '-standard//Standard-Retry', Operation Key: 'null', Result: '500'

[23:33:37 INF] Starting TavTechnologies.Treva.AdministrationService [23:33:40 INF] Trying to acquire the distributed lock for database migration: AdministrationService. [23:33:40 INF] Distributed lock is acquired for database migration: AdministrationService... Cannot load library libgssapi_krb5.so.2 Error: libgssapi_krb5.so.2: cannot open shared object file: No such file or directory [23:33:41 INF] Seeding admin permissions. [23:33:43 INF] Distributed lock has been released for database migration: AdministrationService... [23:33:43 INF] Trying to acquire the distributed lock for database migration: AbpBlobStoring. [23:33:43 INF] Distributed lock is acquired for database migration: AbpBlobStoring... [23:33:43 INF] Distributed lock has been released for database migration: AbpBlobStoring... [23:33:44 INF] Saving external localizations... [23:33:44 INF] Initialized all ABP modules. [23:33:44 INF] Completed to save external localizations. [23:33:44 WRN] Overriding HTTP_PORTS '8080' and HTTPS_PORTS ''. Binding to values defined by URLS instead 'http://+:8080'. [23:33:45 INF] Now listening on: http://[::]:8080 [23:33:45 INF] Application started. Press Ctrl+C to shut down. [23:33:45 INF] Hosting environment: Staging [23:33:45 INF] Content root path: /app [23:33:47 INF] Request starting HTTP/1.1 GET http://treva-administration/api/abp/application-configuration?IncludeLocalizationResources=False&api-version=1.0 - null null [23:33:47 INF] Request starting HTTP/1.1 GET http://treva-administration/api/abp/application-localization?CultureName=&OnlyDynamics=True&api-version=1.0 - null null [23:33:48 INF] Executing endpoint 'Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationLocalizationController.GetAsync (Volo.Abp.AspNetCore.Mvc)' [23:33:48 INF] Executing endpoint 'Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController.GetAsync (Volo.Abp.AspNetCore.Mvc)' [23:33:48 INF] Route matched with {area = "abp", action = "Get", controller = "AbpApplicationLocalization", page = ""}. Executing controller action with signature System.Threading.Tasks.Task`1[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationDto] GetAsync(Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationRequestDto) on controller Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationLocalizationController (Volo.Abp.AspNetCore.Mvc). [23:33:48 INF] Route matched with {area = "abp", action = "Get", controller = "AbpApplicationConfiguration", page = ""}. Executing controller action with signature System.Threading.Tasks.Task`1[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto] GetAsync(Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationRequestOptions) on controller Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController (Volo.Abp.AspNetCore.Mvc). [23:33:48 INF] Executing action method Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController.GetAsync (Volo.Abp.AspNetCore.Mvc) - Validation state: Valid [23:33:48 WRN] The cookie 'XSRF-TOKEN' has set 'SameSite=None' and must also set 'Secure'. [23:33:48 WRN] ---------- RemoteServiceErrorInfo ---------- { "code": null, "message": "Your request is not valid!", "details": "The following errors were detected during validation.\n - The CultureName field is required.\n", "data": null, "validationErrors": [ { "message": "The CultureName field is required.", "members": [ "cultureName" ] } ] } [23:33:48 WRN] ModelState is not valid! See ValidationErrors for details. Volo.Abp.Validation.AbpValidationException: ModelState is not valid! See ValidationErrors for details. at Volo.Abp.AspNetCore.Mvc.Validation.ModelStateValidator.Validate(ModelStateDictionary modelState) at Volo.Abp.AspNetCore.Mvc.Validation.AbpValidationActionFilter.OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync() --- End of stack trace from previous location --- at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextExceptionFilterAsync>g__Awaited|26_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) [23:33:48 WRN] There are 1 validation errors: The CultureName field is required. (CultureName) [23:33:48 INF] Executing ObjectResult, writing value of type 'Volo.Abp.Http.RemoteServiceErrorResponse'. [23:33:48 INF] Executed action Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationLocalizationController.GetAsync (Volo.Abp.AspNetCore.Mvc) in 172.5808ms [23:33:48 INF] Executed endpoint 'Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationLocalizationController.GetAsync (Volo.Abp.AspNetCore.Mvc)'

Markdown supported.
Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)

10 Answer(s)
  • User Avatar
    0
    AI-Bot created
    Support Team ABP Agent
    • /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=).
    • In ABP MVC microservice solutions, 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):

    1) Ensure the gateway forwards the culture to downstream services (recommended)

    In Kubernetes / ingress / reverse-proxy setups, the request culture is typically resolved from one of these:

    • Accept-Language header
    • ABP culture cookie (set by the UI)
    • Query string (cultureName, 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:

    • Preserve Accept-Language end-to-end.
    • Ensure the full query string is forwarded as-is (some proxies can be misconfigured to drop/normalize it).

    After that, ABP will be able to resolve culture and will call: /api/abp/application-localization?cultureName=en... instead of CultureName=.

    2) Force a default culture for the UI apps (defensive)

    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.

    3) As a last resort: customize the application-localization endpoint validation (not recommended)

    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.

     

    • https://abp.io/docs/10.2/framework/api-development/standard-apis/localization

    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.

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • User Avatar
    0
    consultant.ahmet.ulusoy created

    I made all of them but no change

    [13:23:15 INF] Starting TavTechnologies.Treva.Web.Public [13:23:18 INF] Initialized all ABP modules. [13:23:19 INF] Initializing UI Database [13:23:20 INF] Saving healthchecks configuration to database [13:23:20 WRN] Overriding HTTP_PORTS '8080' and HTTPS_PORTS ''. Binding to values defined by URLS instead 'http://+:8080'. [13:23:20 INF] Now listening on: http://[::]:8080 [13:23:20 INF] Start processing HTTP request GET http://localhost:8080/health-status [13:23:20 INF] Sending HTTP request GET http://localhost:8080/health-status [13:23:20 INF] Application started. Press Ctrl+C to shut down. [13:23:20 INF] Hosting environment: Staging [13:23:20 INF] Content root path: /app [13:23:20 INF] Request starting HTTP/1.1 GET http://localhost:8080/health-status - null null [13:23:20 WRN] Could not find IdentityClientConfiguration for AbpMvcClient. Either define a configuration for AbpMvcClient or set a default configuration. [13:23:20 INF] Start processing HTTP request GET http://treva-publicgateway/api/abp/application-configuration?* [13:23:20 INF] Sending HTTP request GET http://treva-publicgateway/api/abp/application-configuration?* [13:23:20 WRN] Could not find IdentityClientConfiguration for AbpMvcClient. Either define a configuration for AbpMvcClient or set a default configuration. [13:23:20 INF] Start processing HTTP request GET http://treva-publicgateway/api/abp/application-localization?* [13:23:20 INF] Sending HTTP request GET http://treva-publicgateway/api/abp/application-localization?* [13:23:21 INF] Received HTTP response headers after 37.0391ms - 400 [13:23:21 INF] Execution attempt. Source: '-standard//Standard-Retry', Operation Key: 'null', Result: '400', Handled: 'False', Attempt: '0', Execution Time: 48.0712ms [13:23:21 INF] End processing HTTP request after 62.7315ms - 400 [13:23:21 INF] Received HTTP response headers after 254.533ms - 200 [13:23:21 INF] Execution attempt. Source: '-standard//Standard-Retry', Operation Key: 'null', Result: '200', Handled: 'False', Attempt: '0', Execution Time: 262.2115ms [13:23:21 INF] End processing HTTP request after 263.1122ms - 200 [13:23:21 ERR] Connection id "0HNKHGGMCU4UQ", Request id "0HNKHGGMCU4UQ:00000001": An unhandled exception was thrown by the application. Volo.Abp.Http.Client.AbpRemoteCallException: Your request is not valid! at Volo.Abp.Http.Client.ClientProxying.ClientProxyBase1.ThrowExceptionForResponseAsync(HttpResponseMessage response) at Volo.Abp.Http.Client.ClientProxying.ClientProxyBase1.RequestAsync(ClientProxyRequestContext requestContext) at Volo.Abp.Http.Client.ClientProxying.ClientProxyBase1.RequestAsync[T](ClientProxyRequestContext requestContext) at Volo.Abp.Http.Client.ClientProxying.ClientProxyBase1.RequestAsync[T](String methodName, ClientProxyRequestTypeValue arguments) at Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClientProxies.AbpApplicationLocalizationClientProxy.GetAsync(ApplicationLocalizationRequestDto input) at Volo.Abp.AspNetCore.Mvc.Client.MvcCachedApplicationConfigurationClient.GetRemoteConfigurationAsync() at Volo.Abp.AspNetCore.Mvc.Client.MvcCachedApplicationConfigurationClient.<GetAsync>b__23_0() at Volo.Abp.Caching.DistributedCache2.GetOrAddAsync(TCacheKey key, Func1 factory, Func1 optionsFactory, Nullable1 hideErrors, Boolean considerUow, CancellationToken token) at Volo.Abp.AspNetCore.Mvc.Client.MvcCachedApplicationConfigurationClient.GetAsync() at Volo.Abp.AspNetCore.Mvc.Client.RemoteLanguageProvider.GetLanguagesAsync() at Microsoft.AspNetCore.RequestLocalization.DefaultAbpRequestLocalizationOptionsProvider.GetLocalizationOptionsAsync() at Microsoft.AspNetCore.RequestLocalization.AbpRequestLocalizationMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<<CreateMiddleware>b__0>d.MoveNext() --- End of stack trace from previous location --- at Volo.Abp.AspNetCore.Mvc.Libs.AbpMvcLibsService.<CheckLibs>b__1_0(HttpContext httpContext, RequestDelegate next) at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application) [13:23:21 INF] Request finished HTTP/1.1 GET https://localhost:8080/health-status - 500 0 null 614.8221ms [13:23:21 INF] Received HTTP response headers after 682.6244ms - 500 [13:23:21 WRN] Execution attempt. Source: '-standard//Standard-Retry', Operation Key: 'null', Result: '500', Handled: 'True', Attempt: '0', Execution Time: 706.7309ms [13:23:21 WRN] Resilience event occurred. EventName: 'OnRetry', Source: '-standard//Standard-Retry', Operation Key: 'null', Result: '500'

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • User Avatar
    0
    AI-Bot created
    Support Team ABP Agent

    The key detail in your new log is this:

    GET http://treva-publicgateway/api/abp/application-localization?*

    That means the MVC UI is calling the endpoint without cultureName at all (not even empty). ABP’s /api/abp/application-localization endpoint requires cultureName, so the gateway correctly returns 400, and the UI crashes while building request localization options.

    Since you already tried proxy/header/default culture ideas and nothing changed, the most reliable fix is to force the MVC UI to always include cultureName when requesting application-localization by overriding the client that makes that call.

    Solution (override the MVC cached application configuration client)

    In both TavTechnologies.Treva.Web and TavTechnologies.Treva.Web.Public:

    1. Create a custom implementation:
    using System.Globalization;
    using System.Threading.Tasks;
    using Volo.Abp.AspNetCore.Mvc.Client;
    using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
    using Volo.Abp.DependencyInjection;
    
    public class FixedMvcCachedApplicationConfigurationClient : MvcCachedApplicationConfigurationClient, ITransientDependency
    {
        private readonly IAbpApplicationLocalizationAppService _localizationAppService;
    
        public FixedMvcCachedApplicationConfigurationClient(
            IAbpApplicationConfigurationAppService applicationConfigurationAppService,
            IAbpApplicationLocalizationAppService localizationAppService)
            : base(applicationConfigurationAppService, localizationAppService)
        {
            _localizationAppService = localizationAppService;
        }
    
        protected override Task<ApplicationLocalizationDto> GetLocalizationAsync()
        {
            // Ensure cultureName is never missing
            var cultureName = CultureInfo.CurrentUICulture?.Name;
            if (string.IsNullOrWhiteSpace(cultureName))
            {
                cultureName = "en";
            }
    
            return _localizationAppService.GetAsync(new ApplicationLocalizationRequestDto
            {
                CultureName = cultureName,
                OnlyDynamics = true
            });
        }
    }
    
    1. Replace the default service registration in your web module:
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.DependencyInjection.Extensions;
    using Volo.Abp.AspNetCore.Mvc.Client;
    
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        context.Services.Replace(ServiceDescriptor.Transient<
            MvcCachedApplicationConfigurationClient,
            FixedMvcCachedApplicationConfigurationClient>());
    }
    

    This guarantees the call becomes:

    /api/abp/application-localization?cultureName=en...

    and avoids the startup crash even if something in your environment is preventing ABP from determining culture normally.

    Why this works

    Your logs prove the request is being made without cultureName. The ABP endpoint requires it, and returns 400 when it’s missing. By forcing the client to always send a non-empty culture, you bypass the failing path and your UI can start.

    Verified reference

    • /api/abp/application-localization requires cultureName: https://abp.io/docs/10.2/framework/api-development/standard-apis/localization

    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.

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • User Avatar
    0
    consultant.ahmet.ulusoy created

    It's still same.

    [14:05:52 INF] Starting TavTechnologies.Treva.Web.Public [14:05:55 INF] Initialized all ABP modules. [14:05:55 INF] Initializing UI Database [14:05:56 INF] Saving healthchecks configuration to database [14:05:56 WRN] Overriding HTTP_PORTS '8080' and HTTPS_PORTS ''. Binding to values defined by URLS instead 'http://+:8080'. [14:05:56 INF] Now listening on: http://[::]:8080 [14:05:56 INF] Start processing HTTP request GET http://localhost:8080/health-status [14:05:56 INF] Sending HTTP request GET http://localhost:8080/health-status [14:05:56 INF] Application started. Press Ctrl+C to shut down. [14:05:56 INF] Hosting environment: Staging [14:05:56 INF] Content root path: /app [14:05:56 INF] Request starting HTTP/1.1 GET http://localhost:8080/health-status - null null [14:05:57 WRN] Could not find IdentityClientConfiguration for AbpMvcClient. Either define a configuration for AbpMvcClient or set a default configuration. [14:05:57 INF] Start processing HTTP request GET http://treva-publicgateway/api/abp/application-configuration?* [14:05:57 WRN] Could not find IdentityClientConfiguration for AbpMvcClient. Either define a configuration for AbpMvcClient or set a default configuration. [14:05:57 INF] Start processing HTTP request GET http://treva-publicgateway/api/abp/application-localization?* [14:05:57 INF] Sending HTTP request GET http://treva-publicgateway/api/abp/application-configuration?* [14:05:57 INF] Sending HTTP request GET http://treva-publicgateway/api/abp/application-localization?* [14:05:57 INF] Received HTTP response headers after 53.4503ms - 400 [14:05:57 INF] Execution attempt. Source: '-standard//Standard-Retry', Operation Key: 'null', Result: '400', Handled: 'False', Attempt: '0', Execution Time: 74.4164ms [14:05:57 INF] End processing HTTP request after 90.7847ms - 400 [14:05:57 INF] Received HTTP response headers after 207.9792ms - 200 [14:05:57 INF] Execution attempt. Source: '-standard//Standard-Retry', Operation Key: 'null', Result: '200', Handled: 'False', Attempt: '0', Execution Time: 216.7316ms [14:05:57 INF] End processing HTTP request after 217.9695ms - 200 [14:05:57 ERR] Connection id "0HNKHH8G7FMKA", Request id "0HNKHH8G7FMKA:00000001": An unhandled exception was thrown by the application. Volo.Abp.Http.Client.AbpRemoteCallException: Your request is not valid! at Volo.Abp.Http.Client.ClientProxying.ClientProxyBase1.ThrowExceptionForResponseAsync(HttpResponseMessage response) at Volo.Abp.Http.Client.ClientProxying.ClientProxyBase1.RequestAsync(ClientProxyRequestContext requestContext) at Volo.Abp.Http.Client.ClientProxying.ClientProxyBase1.RequestAsync[T](ClientProxyRequestContext requestContext) at Volo.Abp.Http.Client.ClientProxying.ClientProxyBase1.RequestAsync[T](String methodName, ClientProxyRequestTypeValue arguments) at Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClientProxies.AbpApplicationLocalizationClientProxy.GetAsync(ApplicationLocalizationRequestDto input) at Volo.Abp.AspNetCore.Mvc.Client.MvcCachedApplicationConfigurationClient.GetRemoteConfigurationAsync() at Volo.Abp.AspNetCore.Mvc.Client.MvcCachedApplicationConfigurationClient.<GetAsync>b__23_0() at Volo.Abp.Caching.DistributedCache2.GetOrAddAsync(TCacheKey key, Func1 factory, Func1 optionsFactory, Nullable1 hideErrors, Boolean considerUow, CancellationToken token) at Volo.Abp.AspNetCore.Mvc.Client.MvcCachedApplicationConfigurationClient.GetAsync() at Volo.Abp.AspNetCore.Mvc.Client.RemoteLanguageProvider.GetLanguagesAsync() at Microsoft.AspNetCore.RequestLocalization.DefaultAbpRequestLocalizationOptionsProvider.GetLocalizationOptionsAsync() at Microsoft.AspNetCore.RequestLocalization.AbpRequestLocalizationMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<<CreateMiddleware>b__0>d.MoveNext() --- End of stack trace from previous location --- at Volo.Abp.AspNetCore.Mvc.Libs.AbpMvcLibsService.<CheckLibs>b__1_0(HttpContext httpContext, RequestDelegate next) at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application) [14:05:57 INF] Received HTTP response headers after 560.7824ms - 500 [14:05:57 WRN] Execution attempt. Source: '-standard//Standard-Retry', Operation Key: 'null', Result: '500', Handled: 'True', Attempt: '0', Execution Time: 584.7674ms [14:05:57 INF] Request finished HTTP/1.1 GET https://localhost:8080/health-status - 500 0 null 517.9328ms [14:05:57 WRN] Resilience event occurred. EventName: 'OnRetry', Source: '-standard//Standard-Retry', Operation Key: 'null', Result: '500' [14:05:58 INF] Sending HTTP request GET http://localhost:8080/health-status [14:05:58 INF] Request starting HTTP/1.1 GET http://localhost:8080/health-status - null null

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • User Avatar
    0
    AI-Bot created
    Support Team ABP Agent

    Your log still shows the MVC UI is calling:

    GET http://treva-publicgateway/api/abp/application-localization?*

    So the UI-side override you added is not being used at all (otherwise you would see cultureName=... on the outgoing request).

    The most definitive way to fix this without relying on the UI client pipeline is to make the gateway always supply a default cultureName when it proxies /api/abp/application-localization.

    Solution

    In PublicWebGateway (YARP-based gateway), add a transform for the /api/abp/application-localization route so that if cultureName is missing, it is added.

    Example (in the gateway module ConfigureServices):

    using Microsoft.Extensions.DependencyInjection;
    using System;
    
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        context.Services.AddReverseProxy()
            .AddTransforms(builderContext =>
            {
                // Apply only for the app-localization endpoint
                if (builderContext.Route?.Match?.Path != null &&
                    builderContext.Route.Match.Path.Contains("/api/abp/application-localization", StringComparison.OrdinalIgnoreCase))
                {
                    builderContext.AddRequestTransform(transformContext =>
                    {
                        var query = transformContext.HttpContext.Request.Query;
    
                        // If cultureName is missing or empty, force a default
                        if (!query.ContainsKey("cultureName") || string.IsNullOrWhiteSpace(query["cultureName"]))
                        {
                            var original = transformContext.ProxyRequest.RequestUri;
    
                            // Append required query string parameters
                            var separator = string.IsNullOrEmpty(original!.Query) ? "?" : "&";
                            var newUri = new Uri(original.ToString() + $"{separator}cultureName=en&onlyDynamics=true");
    
                            transformContext.ProxyRequest.RequestUri = newUri;
                        }
    
                        return ValueTask.CompletedTask;
                    });
                }
            });
    }
    

    This guarantees the downstream service receives a valid request like: /api/abp/application-localization?cultureName=en&onlyDynamics=true and prevents the startup crash.

    Why this is the correct next step

    • Your logs prove the request reaches the gateway without cultureName.
    • Even after UI-side changes, the outgoing request is still ?*, meaning the UI override isn’t actually active (wrong service replaced, wrong project/module, or not loaded).
    • The gateway transform is the last “central” place where you can unconditionally enforce the required parameter for all callers.

    Reference (requirement)

    cultureName is required for /api/abp/application-localization:

    • https://abp.io/docs/10.2/framework/api-development/standard-apis/localization

    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.

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • User Avatar
    0
    consultant.ahmet.ulusoy created

    [14:23:25 INF] Starting TavTechnologies.Treva.Web.Public [14:23:28 INF] Initialized all ABP modules. [14:23:28 INF] Initializing UI Database [14:23:29 INF] Saving healthchecks configuration to database [14:23:29 WRN] Overriding HTTP_PORTS '8080' and HTTPS_PORTS ''. Binding to values defined by URLS instead 'http://+:8080'. [14:23:30 INF] Now listening on: http://[::]:8080 [14:23:30 INF] Start processing HTTP request GET http://localhost:8080/health-status [14:23:30 INF] Sending HTTP request GET http://localhost:8080/health-status [14:23:30 INF] Application started. Press Ctrl+C to shut down. [14:23:30 INF] Hosting environment: Staging [14:23:30 INF] Content root path: /app [14:23:30 INF] Request starting HTTP/1.1 GET http://localhost:8080/health-status - null null [14:23:30 WRN] Could not find IdentityClientConfiguration for AbpMvcClient. Either define a configuration for AbpMvcClient or set a default configuration. [14:23:30 INF] Start processing HTTP request GET http://treva-publicgateway/api/abp/application-configuration?* [14:23:30 WRN] Could not find IdentityClientConfiguration for AbpMvcClient. Either define a configuration for AbpMvcClient or set a default configuration. [14:23:30 INF] Start processing HTTP request GET http://treva-publicgateway/api/abp/application-localization?* [14:23:30 INF] Sending HTTP request GET http://treva-publicgateway/api/abp/application-localization?* [14:23:30 INF] Sending HTTP request GET http://treva-publicgateway/api/abp/application-configuration?* [14:23:30 INF] Received HTTP response headers after 34.7119ms - 400 [14:23:30 INF] Execution attempt. Source: '-standard//Standard-Retry', Operation Key: 'null', Result: '400', Handled: 'False', Attempt: '0', Execution Time: 51.7668ms [14:23:30 INF] End processing HTTP request after 71.8322ms - 400 [14:23:30 INF] Received HTTP response headers after 213.0176ms - 200 [14:23:30 INF] Execution attempt. Source: '-standard//Standard-Retry', Operation Key: 'null', Result: '200', Handled: 'False', Attempt: '0', Execution Time: 225.3904ms [14:23:30 INF] End processing HTTP request after 226.0725ms - 200 [14:23:30 ERR] Connection id "0HNKHHIA57VBB", Request id "0HNKHHIA57VBB:00000001": An unhandled exception was thrown by the application. Volo.Abp.Http.Client.AbpRemoteCallException: Your request is not valid! at Volo.Abp.Http.Client.ClientProxying.ClientProxyBase1.ThrowExceptionForResponseAsync(HttpResponseMessage response) at Volo.Abp.Http.Client.ClientProxying.ClientProxyBase1.RequestAsync(ClientProxyRequestContext requestContext) at Volo.Abp.Http.Client.ClientProxying.ClientProxyBase1.RequestAsync[T](ClientProxyRequestContext requestContext) at Volo.Abp.Http.Client.ClientProxying.ClientProxyBase1.RequestAsync[T](String methodName, ClientProxyRequestTypeValue arguments) at Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClientProxies.AbpApplicationLocalizationClientProxy.GetAsync(ApplicationLocalizationRequestDto input) at Volo.Abp.AspNetCore.Mvc.Client.MvcCachedApplicationConfigurationClient.GetRemoteConfigurationAsync() at Volo.Abp.AspNetCore.Mvc.Client.MvcCachedApplicationConfigurationClient.<GetAsync>b__23_0() at Volo.Abp.Caching.DistributedCache2.GetOrAddAsync(TCacheKey key, Func1 factory, Func1 optionsFactory, Nullable1 hideErrors, Boolean considerUow, CancellationToken token) at Volo.Abp.AspNetCore.Mvc.Client.MvcCachedApplicationConfigurationClient.GetAsync() at Volo.Abp.AspNetCore.Mvc.Client.RemoteLanguageProvider.GetLanguagesAsync() at Microsoft.AspNetCore.RequestLocalization.DefaultAbpRequestLocalizationOptionsProvider.GetLocalizationOptionsAsync() at Microsoft.AspNetCore.RequestLocalization.AbpRequestLocalizationMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<<CreateMiddleware>b__0>d.MoveNext() --- End of stack trace from previous location --- at Volo.Abp.AspNetCore.Mvc.Libs.AbpMvcLibsService.<CheckLibs>b__1_0(HttpContext httpContext, RequestDelegate next) at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application) [14:23:30 INF] Received HTTP response headers after 541.9326ms - 500 [14:23:30 INF] Request finished HTTP/1.1 GET https://localhost:8080/health-status - 500 0 null 476.7667ms [14:23:30 WRN] Execution attempt. Source: '-standard//Standard-Retry', Operation Key: 'null', Result: '500', Handled: 'True', Attempt: '0', Execution Time: 585.612ms

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • User Avatar
    0
    AI-Bot created
    Support Team ABP Agent

    The ?* you see in the client log is just ABP’s log formatting (it hides the query details). The real proof is on the target service side: earlier you already captured a request arriving as:

    /api/abp/application-localization?CultureName=&OnlyDynamics=True&api-version=1.0

    So the query parameter exists but ends up empty (CultureName=). That usually happens when the UI app can’t determine the current culture at startup inside the container, so it passes an empty string to the application-localization call.

    The most reliable, ABP-consistent fix is: set the default culture explicitly in the UI apps and ensure ABP uses it.

    1) Hard-set DefaultThreadCurrentCulture + DefaultThreadCurrentUICulture at startup (PublicWeb + Web)

    In Program.cs of TavTechnologies.Treva.Web.Public and TavTechnologies.Treva.Web (before app.InitializeApplicationAsync()), add:

    using System.Globalization;
    
    CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en");
    CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("en");
    

    This guarantees CultureInfo.CurrentUICulture.Name is never empty in the process (container) even before the first HTTP request is fully processed.

    2) Also set ABP RequestLocalization default culture (defensive)

    Keep/configure RequestLocalizationOptions as well (module ConfigureServices):

    context.Services.Configure<RequestLocalizationOptions>(options =>
    {
        options.SetDefaultCulture("en");
    });
    

    3) Make sure Linux globalization isn’t running in invariant mode

    When .NET runs with invariant globalization, cultures can behave unexpectedly. In your PublicWeb/Web container, ensure this env var is not true:

    • DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false

    (If it’s missing, that’s fine; just don’t set it to true.)

    Why this fixes your specific symptom

    ABP’s application-localization endpoint requires cultureName (validated by ABP and documented). Your backend logs showed CultureName=. The only way that happens is: the caller (MVC UI) is constructing the request with an empty culture value. For containerized deployments, explicitly setting DefaultThreadCurrentUICulture is the most deterministic way to prevent an empty culture during early startup.

    Reference

    • https://abp.io/docs/10.2/framework/api-development/standard-apis/localization

    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.

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    hi

    Is your problem solved?

    Thanks.

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • User Avatar
    0
    consultant.ahmet.ulusoy created

    Hi maliming,

    I removed Abp Studio, Suite and Cli completely and delete related folders from user path.

    Also removed nuget packages and history.

    Reinstalled from scratch and create a new solution and then updated the new solution to Abp 10.2.0 than 10.2.0 suite template files came.

    Thank you.

    Have a great day.

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    Great : )

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
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.8.0-preview. Updated on September 28, 2026, 11:44
1
ABP Assistant
🔐 You need to be logged in to use the chatbot. Please log in first.