1

私は、公開されている残りの Web サービス用の消費者向けアプリを開発しています。
プロキシとサービス認証の 2 つの問題があります。
プロキシを通過できないようです。実際には、プロキシを通過するための有効な資格情報がありますが、それを提供する場所や方法がわかりません!
そして第二に、Webサービスによって発行された基本認証チャレンジに応答する方法もわかり
ません...ブラウザ経由で使用できますが、C#アプリで動作させることはできません。これまでのコードは次のとおりです。

HttpClient cli = new HttpClient();
cli.BaseAddress = new Uri("http://myserver.com/");            
HttpResponseMessage response = cli.GetAsync("api/service1").Result;

textBox1.Text = response.Content.ReadAsStringAsync().Result;

これまでのtextBox1の結果は常に407エラーです...誰か助けてくれますか?

Edit1: Web サービスでの認証のタイプは BASIC です!
Edit2: clientHandler.Credentials = new NetworkCredential("user", "P@ssw0rd"); 動作しません...サーバーが「このリクエストにはHTTP認証が必要です」を返します

4

1 に答える 1

3

プロキシ情報は、HttpClient コンストラクターに渡すことができる HttpClientHandler オブジェクトで構成する必要があります。

var clientHandler = new HttpClientHandler();
clientHandler.Proxy = new WebProxy("http://proxyserver:80/",true);
var httpClient = new HttpClient(clientHandler);

資格情報については、次のようにします...

    var clientHandler = new HttpClientHandler() {PreAuthenticate = true};

    var credentialCache = new CredentialCache();
    credentialCache.Add(new Uri(Host), "Basic", new NetworkCredential(userName, password));
    clientHandler.Credentials = credentialCache;

このように設定することで、「ホスト」URI の下にある任意の URI にリクエストを行うたびに、HttpClientHandler は正しい認証ヘッダーを自動的に設定します。

また、HttpClientHandler の代わりに使用できる WebRequestHandler という代替ハンドラーがあることに注意してください。これは、WinINet プロキシーや Pipelining などの Windows OS でのみ使用できる追加のものを追加します。

于 2012-11-30T21:41:54.587 に答える