4

基本認証 (ユーザー名/パスワード) を使用する Web サイトがあります。

次のコードが機能しないのはなぜですか? 実行すると、Web アプリケーションはログイン コントローラーに移動しますが、資格情報を入力しているため、既に認証されているはずです。つまり、認証プロセスを自動化するために、.NET で winforms HttpWebRequest を確認する方法を確認しようとしています。NetworkCredential がこれを行う必要がある .net クラスであると想定していますか? または、.NET では、自分で実装しなければならない手動の 2 段階プロセスがあると予想されますか?

コードは次のとおりです。

    // Create a new webrequest to the mentioned URL.            
    var uri = new Uri("http://10.1.1.102:3000/download/sunset");
    var myWebRequest = (HttpWebRequest)WebRequest.Create(uri);            
    myWebRequest.PreAuthenticate=true;            
    var networkCredential=new NetworkCredential("test", "asdfasdf");                        
    myWebRequest.Credentials=networkCredential;
    var myWebResponse = (HttpWebResponse)myWebRequest.GetResponse();

    Console.Out.WriteLine("STATUS = " + myWebResponse.StatusCode);

    var stream = myWebResponse.GetResponseStream();
    var reader = new StreamReader(stream);
    string text_read = reader.ReadToEnd();
    Console.WriteLine(text_read);
    DisplayHtml(text_read);
    reader.Close();
    stream.Close();
    myWebResponse.Close();

ありがとう

4

2 に答える 2

16

WebRequestサイトからの異議申し立てがない限り、クレデンシャルは送信されません。WWW-Authenticateサイトは最初にヘッダー付きの401「承認が必要」で応答する必要があります。はWebRequestクレデンシャルでチャレンジに応答し、サービスは200Httpコンテンツで応答する必要があります。

サイトが基本認証を適切に実装していないようです(仕様では、レルムを渡すために最初にチャレンジする必要があります)。これは非常に一般的な動作です。コレクションに基本認証を手動で追加できますWebRequest.Headers。これは、ほとんどの開発者がとにかくやることをやめることです。

HttpWebRequestが資格情報を渡さないを参照してください

于 2009-12-01T23:17:51.820 に答える