ASP.NET Core: solucionando erros de conversão/formatação com Localization

No desenvolvimento de aplicações Web são extremamente comuns tarefas como a formatação de valores financeiros e datas, bem como conversões de strings para tipos numéricos. Muitos profissionais costumam configurar seus computadores com os formatos regionais considerados ideais para os projetos que estão desenvolvendo, porém não se atentam à hipótese de uso de padrões diferentes nos computadores que hospedarão tais soluções.
A seguir temos um exemplo de site desenvolvido com o ASP.NET Core 2.1, sendo que o mesmo possibilitará a conversão de distâncias em milhas para o equivalente em Km:

Um valor de 100,5 milhas foi convertido para 161,7045 Km, seguindo o comportamento esperado para o projeto. Vale ressaltar que este print foi obtido a partir da execução local da aplicação, em uma máquina na qual foram selecionadas as configurações regionais válidas para o Brasil.
E se utilizarmos Docker com o objetivo de executar este mesmo site a partir de um container Linux?
Na próxima imagem é possível observar o resultado disto (com a execução do container na porta 1234), em que aparentemente a conversão não aconteceu da forma imaginada:

Importante recordar que nas configurações norte-americanas o caracter “.” (ponto) corresponde ao separador decimal, ao passo que “,” (vírgula) seria o separador de milhar. Assim o valor esperado de 161,7045 Km se transformou em 1617.045 Km (além de estar com sua formatação diferente do teste inicial).
Como podemos então solucionar isto?
A resposta passa pelo suporte a Localization presente no ASP.NET Core através do middleware UseRequestLocalization. Uma chamada a esta operação no método Configure na classe Startup permitirá especificar a cultura padrão (pt-BR no caso desta aplicação de exemplo), evitando assim problemas de conversão/formatação:
A geração de uma nova imagem após esse ajuste e a consequente criação de um container permitirão a execução de um teste em conformidade com o comportamento originalmente previsto:

Os fontes da aplicação utilizada como base neste artigo estão disponíveis no GitHub:
https://github.com/renatogroffe/Selenium-DotNetCore2.1-xUnit-VSCode
E aproveito este espaço para deixar aqui um convite.
Dia 03/09/2018 (segunda-feira) às 21h30 - horário de Brasília - teremos mais um hangout no Canal .NET. O tema desta vez será acessibilidade em aplicações, com a presença do MVP Alexandre Santos Costa (Magoo).
Para efetuar a sua inscrição acesse a página do evento no Facebook ou então o Meetup. A transmissão acontecerá via YouTube, em um link a ser divulgado em breve.
