Utiliser un proxy avec .NET 4.5 HttpClient

Je dépanne un bug avec un service que j’appelle via HttpClient de .NET, essayant de router la demande via un proxy local (Fiddler), mais mes parameters de proxy semblent ne pas prendre effet.

Voici comment je crée le client:

private HttpClient CreateHttpClient(CommandContext ctx, ssortingng sid) { var cookies = new CookieContainer(); var handler = new HttpClientHandler { CookieContainer = cookies, UseCookies = true, UseDefaultCredentials = false, Proxy = new WebProxy("http://localhost:8888", false, new ssortingng[]{}), 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; } 

puis j’envoie la demande par:

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

La demande va directement au serveur sans tenter de toucher le proxy. Qu’est-ce que j’ai raté?

Ce code a fonctionné pour moi:

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

Notez que je ne WebProxy pas un tableau vide à mon constructeur WebProxy . C’est peut-être le problème?

Ah, la BaseAddress que je désignais était http://localhost:8081 . Il s’avère que malgré le réglage de BypassOnLocal sur false, il est évident que localhost est suffisamment spécial pour ignorer le proxy.

J’ai ajouté une liaison de domaine dans IIS, entrée de fichier hôte pour pointer ce domaine vers 127.0.0.1, utilisé le domaine nouvellement créé, maintenant il fonctionne.

Est-ce que Fiddler est configuré pour capturer le trafic de tous les processus? Regardez la barre d’état où vous voyez “Capture”. Il devrait afficher “Tous les processus” à côté. S’il affiche “Navigateurs Web”, cliquez dessus et changez-le pour tous les processus. Cela peut être différent selon la version de Fiddler que vous utilisez.