Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

187
Visualizações
"burlándose" de una clase cuando está en desarrollo

Tengo este problema donde necesito hacer una llamada API externa, sin embargo, cuando estoy en producción tengo que usar un certificado para la llamada API y en desarrollo realmente no necesito uno. Me preguntaba cómo implementar una solución en la que pueda tener una separación entre el código de producción y el código de desarrollo para no tener que comentar la parte y posiblemente olvidar cambiarla. ¡Cualquier consejo sería apreciado!

 public async Task<GetPersonResponse> PostPerson(PersonDto dto) { try { var httpHandler = new HttpClientHandler(); var certificate = new X509Certificate2( Path.Join(_certOptions.Path, _certOptions.Name), _certOptions.Password, X509KeyStorageFlags.MachineKeySet); httpHandler.ClientCertificates.Add(certificate); var client = new HttpClient(httpHandler); var soapRequest = GenerateRequest(dto); var request = new HttpRequestMessage() { RequestUri = new Uri(_options.Value.URL), Method = HttpMethod.Post, Content = new StringContent(soapRequest.ToString(), Encoding.UTF8, "text/xml"), }; var response = await client.SendAsync(request); } }
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Bueno, un par de cosas ayudarían. Primero, debe mirar HttpClientFactory , que le permitiría pasar el httpclient y ya lo tiene configurado correctamente; en este momento, tiene fugas de sockets con el código que mostró.

Para su pregunta más general sobre cómo hacer que el código maneje el comportamiento cambiante según el entorno, existen dos enfoques bastante comunes.

Lo primero es abstraer el comportamiento en una interfaz e implementaciones para cada entorno. Luego cambie la implementación según el entorno. Entonces, con su aplicación web registraría una implementación específica basada en el entorno de tiempo de ejecución. Entonces su controlador obtendría la interfaz en su constructor.

El segundo sería pasar un elemento de configuración que tuviera la información de tiempo de ejecución y luego ejecutar el código de forma condicional. En ese caso, el controlador tomaría el elemento de configuración en el constructor.

Evitaría usar la compilación condicional ya que es mucho más difícil de probar.

over 4 years ago · Santiago Trujillo Relatório

0

Podría usar preprocesadores condicionales #if #else #endif así:

 #if DEBUG Console.WriteLine("Code will executed only in a debug configuration"); #else Console.WriteLine("Executed if not in a debug configuration"); #endif
over 4 years ago · Santiago Trujillo Relatório

0

Ya tienes condiciones en tu código:

 _options.Value.URL

¿Sería un problema crear un _options.Value.UseCertificate y colocar un if alrededor del código de su certificado?

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda