System.Net.WebClientは不気味失敗します
-
16-09-2019 - |
質問
私は、私たちのTFSサーバー上のレポートサービスインスタンスからいくつかのデータをダウンロードしようとしています。
コードは、ドメインに参加していないコンピュータ上で実行する必要があることを考えると、私は私が資格情報を自分で設定することを考え出しました。運は、HTTP 401不正なバックを持っていません。 [OK]を、私は何が起こっているか見るためにバイオリンをフックアップ。
私は Heisenberged になったとき、しかし、それはだ - コールは今滞りなくて行きました。だから、認証が接続されているフィドラーで通過しますが、それなしで失敗します。 Webクライアントが壊れているか、私はここに深遠な何かが足りないのですか?
private void ThisWorksWhenDomainJoined()
{
WebClient wc = new WebClient();
wc.Credentials = CredentialCache.DefaultNetworkCredentials;
wc.DownloadString("http://teamfoundationserver/reports/........"); //Works
}
private void ThisDoesntWork()
{
WebClient wc = new WebClient();
wc.Credentials = new NetworkCredential("username", "password", "domain");
wc.DownloadString("http://teamfoundationserver/reports/........"); //blows up wih HTTP 401
}
解決
:
このリンクを見てみましょう HTTP認証と.NET WebRequestクラス、のWebClientクラス>
私はあなたと同じ問題を抱えていました。私は1行を追加して、それが動作するように始めました。これを試してみてください。
private void ThisDoesntWork()
{
WebClient wc = new WebClient();
wc.Credentials = new NetworkCredential("username", "password", "domain");
//After adding the headers it started to work !
wc.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
wc.DownloadString("http://teamfoundationserver/reports/........"); //blows up wih HTTP 401
}
他のヒント
...これを試してみてください
var credCache = new CredentialCache();
credCache.Add(new Uri("http://teamfoundationserver/reports/........""),
"Basic",
new NetworkCredential("username", "password", "DOMAIN"));
wc.Credentials = credCache;
問題が解決しない場合は、「交渉」と「基本」を交換してみます。
あなたはこれを使用するとどうなりますか?
wc.Credentials = CredentialCache.DefaultCredentials;
また、あなたは正しいユーザ名、パスワード、およびドメインを持っていることを確認していますか?
も:.NETがそれらまたはそのような何かを壊したときにフィドラーは、いくつかのUnicode文字の周りに変化しているのだろうか。ユーザー/パス/ドメインがUnicodeを持っている場合は、代わりに"\u2638"
の"☺"
のようにそれをエスケープしてみてください。
次のように
私は、CredentialCacheオブジェクトを使用して、このエラーを回避することができた。
WebClient wc = new WebClient();
CredentialCache credCache = new CredentialCache();
credCache.Add(new Uri("http://mydomain.com/"), "Basic",
new NetworkCredential("username", "password"));
wc.Credentials = credCache;
wc.DownloadString(queryString));
所属していません StackOverflow