53

.NET の HttpClient を介して呼び出すサービスのバグをトラブルシューティングし、ローカル プロキシ (Fiddler) を介して要求をルーティングしようとしていますが、プロキシ設定が有効になっていないようです。

クライアントを作成する方法は次のとおりです。

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;
}

次に、次の方法でリクエストを送信します。

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

要求は、プロキシをヒットしようとせずにサーバーに直接送信されます。私は何を取りこぼしたか?

4

3 に答える 3

53

このコードは私のために働いた:

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

WebProxyコンストラクターに空の配列を提供していないことに注意してください。おそらくそれが問題ですか?

于 2014-07-10T12:57:58.100 に答える
9

ああ、私が指していた BaseAddress は でしたhttp://localhost:8081。BypassOnLocal を false に設定しているにもかかわらず、明らかに localhost はプロキシをバイパスするほど特別なものであることがわかります。

IIS にドメイン バインディングを追加し、そのドメインを 127.0.0.1 にポイントするホスト ファイル エントリを追加し、新しく作成されたドメインを使用しました。

于 2013-05-13T16:34:32.547 に答える