5

以下のコードブロックに「リモートサーバーがエラーを返しました:(403)禁止」というエラーメッセージが表示されます。具体的には、この行は失敗しています。var response =(HttpWebResponse)(request.GetResponse());

コードは私の開発マシンでは完全に機能しますが、本番環境では機能しません。両方の環境でIIS7.5を使用しています。両方のマシンにパッチが適用されています(すべてのWindows Updateがインストールされています)。4.0.NetFrameworkを使用します。なぜそれが1台のマシンで動作し、他のマシンでは動作しないのかわからない。

コード:

var uri = new Uri(url);
var request = (HttpWebRequest)WebRequest.Create(uri);

request.KeepAlive = false;
request.ProtocolVersion = HttpVersion.Version10;
request.Timeout = System.Threading.Timeout.Infinite;
request.Method = @"POST";
request.ContentType = @"application/x-www-form-urlencoded";
request.ContentLength = postData.Length;
request.UserAgent = @"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)";                    
request.Accept = "*/*";                    

//setup the stream variables and do the send/retrieve of data
Stream writeStream = request.GetRequestStream();
var bytes = System.Text.Encoding.ASCII.GetBytes(postData);
writeStream.Write(bytes, 0, bytes.Length);
writeStream.Close();                    

var response = (HttpWebResponse)(request.GetResponse());                    
var responseStream = response.GetResponseStream();                    
var readStream = new StreamReader(responseStream, Encoding.UTF8);                    
pageResponse = readStream.ReadToEnd();
4

3 に答える 3

1

クレデンシャルを指定する必要があるかもしれません

request.Credentials = CredentialCache.DefaultCredentials;

または、特定のクレデンシャルパスを渡す必要がある場合は、次のようにします。

request.Credentials = new NetworkCredentials("user", "password");

NetworkdCredentialクラスに関する詳細情報

于 2013-01-06T17:58:33.907 に答える
0

アクセスしようとしているサーバーに対して適切な認証を使用して、要求にCredentialsオブジェクトを設定しようとしましたか?System.Net.NetworkCredentialを参照してください。

于 2013-01-06T17:22:12.697 に答える
0

アプリケーションの認証方法を本番環境とデバイスの両方で確認してみてください(IISマネージャー->Webサイトをクリック->機能ビュー->認証)。

匿名認証が有効になっているデバイスでは、本番環境では有効になっていないようです。本番環境で匿名認証を有効にしない場合は、上記のようにrequest.Credentialsを設定する必要があります。

于 2013-01-06T21:22:15.913 に答える