¿Cómo usar Fiddler con HttpClient?

Sé que hay muchas preguntas / respuestas, blogs sobre esto, sin hablar de las preguntas frecuentes de Telerik. Aún así no pude encontrar esto diagnosticado y resuelto de una manera pura y clara:

Contexto:

Tengo una aplicación de API web y tengo un cliente (prueba unitaria) que utiliza HttpClient para enviar solicitudes a la API. La aplicación API web escucha enhttp: // localhost: 8631 / A veces uso Fiddler para ver qué está pasando.

Problema:

Fiddler no captura el tráfico entre mi HttpClient y la API web. Después de iniciar Fiddler, el tráfico sigue siendo correcto, pero no se muestra en Fiddler.

Diagnósticos hasta ahora:

Importante: Usar cualquier navegador y enviar solicitudes ahttp: // localhost: 8631 / está trabajando, Quiero decir:tráfico capturado por FiddlerConfigurar HttpClient explícitamente para usar Fiddler como proxy no ayuda.Cambiar la URL de HttpClient dehttp: // localhost: 8631 / ahttp: // localhost.violinista: 8631 /ayuda, independientemente de que el proxy se haya configurado o no.

Conclusiones: Al menos mi caso: no se trata de que HttpClient esté configurado explícitamente para usar Fiddler como proxy o no. Se trata del comportamiento de host local de HttpClient y / o Fiddler.

Emitir de nuevo:

Uno puede preguntar: Problema resuelto, ¿cuál es la pregunta? Bien...

Q1: Esto sigue siendo un problema doloroso, porque la URL está codificada o configurada en algún lugar (quiero decirhttp: // localhost: 8631 / o http: // localhost.violinista: 8631 por lo que cada inicio y parada de Fiddler debe actualizarse. Más: el control de la fuente al control de la fuente y la verificación en una otra máquina por parte de un compañero de equipo puede causar problemas. Entonces: ¿Hay alguna solución menos dolorosa para esto?

La codificación dura del nombre de mi máquina (que también podría funcionar) causa el mismo dolor y problema al trabajar en equipo y al usar el control de fuente

Q2: ¿Por qué es este comportamiento inconsistente: purohttp: // localhost: 8631 / funciona desde cualquier navegador pero no desde HttpClient.

Creo que responder la Q2 puede acercarnos a una solución más útil.

Exhibición de código

    // Using the following url  w o r k s  regardless of any proxy setting
    // ...but it is a pain to hardcode or configure this and change    depending on Fiddler is running or not

    //private const string ApiUrl = "http://localhost.fiddler:8631/"; 

    // This is not working regardless any proxy setting. Trafic bypasses Fiddler
    private const string ApiUrl = "http://localhost:8631/";

    protected HttpClient GetClient()
    {
        var httpClientHandler = new HttpClientHandler
        {
            // Does not work 
            //Proxy = new WebProxy("http://localhost:8888", false),

            // Does not work
            Proxy = WebRequest.DefaultWebProxy,
            UseProxy = true
        };


        var client = new HttpClient(httpClientHandler)
        {
            BaseAddress = new Uri(ApiUrl)
        };
        // ...

Respuestas a la pregunta(2)

Su respuesta a la pregunta