12

TFS サーバーの Reporting Services インスタンスからデータをダウンロードしようとしています。
ドメインに参加していないコンピューターでコードを実行する必要があることを考えると、自分で資格情報を設定することにしました。うまくいきませんでした。HTTP 401 Unauthorized が返ってきました。わかりましたので、Fiddler を接続して何が起こっているかを確認しました。

しかし、それが私がハイゼンベルグを手に入れたときです-電話は今では問題なく通過しました. そのため、認証は Fiddler が接続された状態で行われますが、Fiddler が接続されていないと失敗します。Webclient が壊れているのでしょうか、それともここで重要な何かが欠けているのでしょうか?

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

4 に答える 4

4

このリンクを見てください:
HTTP Authorization and .NET WebRequest, WebClient Classes

私はあなたと同じ問題を抱えていました。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
    }
于 2009-11-29T10:42:22.223 に答える
2

これを試して ...

var credCache = new CredentialCache();
credCache.Add(new Uri("http://teamfoundationserver/reports/........""),
                      "Basic", 
                      new NetworkCredential("username", "password", "DOMAIN"));
wc.Credentials = credCache;

それでもうまくいかない場合は、"Basic" を "Negotiate" に置き換えてみてください。

于 2009-06-16T16:15:49.780 に答える
1

これを使うとどうなる?

wc.Credentials = CredentialCache.DefaultCredentials;

また、正しいユーザー名、パスワード、ドメインをお持ちですか?

また、.netがUnicode文字を壊したり、そのようなものを壊したりすると、FiddlerがいくつかのUnicode文字を変更しているのではないかと思います。ユーザー/パス/ドメインに Unicode がある場合は、 の"\u2638"代わりに のようにエスケープしてみてください"☺"

于 2009-06-16T16:07:58.597 に答える
1

次のように 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));
于 2011-12-08T19:19:50.100 に答える