Разница в преобразовании десятичных значений между локальной машиной и контейнером docker

#asp.net-mvc #docker #asp.net-core

Вопрос:

Я создал API веб-приложения, настроил Docker-compose для загрузки 3 контейнеров с базой данных, api и веб-приложением. Теперь я столкнулся с проблемой преобразования десятичных значений.

В моей среде разработки при вводе значения с десятичными знаками все идет нормально (23,14). Смотрите пример на изображениях: введите описание изображения здесь
введите описание изображения здесьКогда я загружаю контейнеры, это поведение отличается, и когда я помещаю одно и то же значение в приложение-контейнер, оно обрабатывает значение по-другому. См. Пример на рисунке ниже. введите описание изображения здесь
введите описание изображения здесь

Как api, так и веб-приложение были настроены на использование шаблона локализации pt-BR, однако в контейнере эта конфигурация, похоже, игнорируется.

ВЕБ-ПРИЛОЖЕНИЕ

 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
      if (env.IsDevelopment())
      {
        app.UseDeveloperExceptionPage();
      }
      else
      {
        app.UseExceptionHandler("/Home/Error");
        // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
        app.UseHsts();
      }
      app.UseHttpsRedirection();
      app.UseStaticFiles();

      app.UseRouting();

      app.UseAuthorization();

      app.UseEndpoints(endpoints =>
      {
        endpoints.MapControllerRoute(
                  name: "default",
                  pattern: "{controller=Home}/{action=Index}/{id?}");
      });

      var defaultCulture = new CultureInfo("pt-BR");
      var localizationOptions = new RequestLocalizationOptions
      {
        DefaultRequestCulture = new RequestCulture(defaultCulture),
        SupportedCultures = new List<CultureInfo> { defaultCulture },
        SupportedUICultures = new List<CultureInfo> { defaultCulture }
      };
      app.UseRequestLocalization(localizationOptions);

    }

 

API

 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {

      // Definindo a cultura padrão: pt-BR
      var supportedCultures = new[] { new CultureInfo("pt-BR") };
      app.UseRequestLocalization(new RequestLocalizationOptions
      {
        DefaultRequestCulture = new RequestCulture(culture: "pt-BR", uiCulture: "pt-BR"),
        SupportedCultures = supportedCultures,
        SupportedUICultures = supportedCultures
      });

      if (env.IsDevelopment())
      {
        app.UseDeveloperExceptionPage();
        app.UseSwagger();
        app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "APIProduto v1"));
      }

      app.UseHttpsRedirection();

      app.UseRouting();

      app.UseAuthorization();

      app.UseEndpoints(endpoints =>
      {
        endpoints.MapControllers();
      });
    }
 

Кто-нибудь может помочь мне понять, что может происходить?

Ответ №1:

После некоторого времени исследований и нескольких неудачных попыток я последовал предложению коллеги определить местоположение контейнеров, как способ решения проблемы, поскольку определение культуры в asp.net основного api и веб-приложения было недостаточно для решения этой проблемы. Я сделал настройки локали в файлах Dockerfile и Docker-compose, и оттуда все работает так, как нужно.

Докерфайл

 RUN apt-get clean amp;amp; apt-get update amp;amp; apt-get install -y locales
RUN locale-gen pt_BR.UTF-8
 

Докер-сочинение

 environment:
     - LANG=pt_BR.UTF-8  
     - LANGUAGE=pt_BR  
     - LC_ALL=pt_BR.UTF-8