it-swarm.com.de

Verwenden eines Proxys mit .NET 4.5 HttpClient

Ich behebe einen Fehler mit einem Dienst, den ich über HttpClient in .NET aufrufe, und versuche, die Anforderung über einen lokalen Proxy (Fiddler) weiterzuleiten, aber meine Proxy-Einstellungen scheinen nicht wirksam zu sein.

So erstelle ich den Client:

private HttpClient CreateHttpClient(CommandContext ctx, string sid) {
    var cookies = new CookieContainer();

    var handler = new HttpClientHandler {
        CookieContainer = cookies,
        UseCookies = true,
        UseDefaultCredentials = false,
        Proxy = new WebProxy("http://localhost:8888", false, new string[]{}),
        UseProxy = true,
    };

    // snip out some irrelevant setting of authentication cookies

    var client = new HttpClient(handler) {
        BaseAddress = _prefServerBaseUrl,
    };

    client.DefaultRequestHeaders.Accept.Add(
        new MediaTypeWithQualityHeaderValue("application/json"));

    return client;
}

dann sende ich die anfrage per:

var response = CreateHttpClient(ctx, sid).PostAsJsonAsync("api/prefs/", smp).Result;

Die Anforderung wird direkt an den Server gesendet, ohne dass versucht wird, den Proxy zu erreichen. Was habe ich verpasst?

50
Mike Ruhlin

Ah, die BaseAddress, auf die ich zeigte, war http://localhost:8081. Es stellt sich heraus, dass localhost trotz der Einstellung von BypassOnLocal auf false immer noch so speziell ist, dass es den Proxy umgeht.

Ich habe eine Domänenbindung in IIS hinzugefügt, Host-Dateieintrag, um diese Domäne auf 127.0.0.1 zu verweisen, verwendete neu erstellte Domäne, jetzt funktioniert es.

7
Mike Ruhlin

Dieser Code hat bei mir funktioniert:

var httpClientHandler = new HttpClientHandler
                        {
                            Proxy = new WebProxy("http://localhost:8888", false),
                            UseProxy = true
                        }

Beachten Sie, dass ich meinem Konstruktor WebProxy kein leeres Array übergebe. Vielleicht ist das das Problem?

49
NathanAldenSr

Ist Fiddler so konfiguriert, dass der Datenverkehr aller Prozesse erfasst wird? Sehen Sie sich die Statusleiste an, in der "Capturing" angezeigt wird. Es sollte "Alle Prozesse" daneben anzeigen. Wenn "Webbrowser" angezeigt werden, klicken Sie darauf und ändern Sie es in alle Prozesse. Dies kann je nach verwendeter Version von Fiddler unterschiedlich sein.

2
Badri