5

私は2つの異なるASP.NET Core Webサイトを持っています:adminとpublic。 両方ともステージングサーバーとローカルマシンで実行されています。WebRequest Strange NotFoundエラー

私は、実行異なるページの時間とadminサイトで直面する問題を決定するために別のページにGETリクエストを送信:ローカルインスタンスとステージング上のすべてのURLは、常に404エラーを返します:

An unhandled exception of type 'System.Net.WebException' occurred in System.dll

Additional information: The remote server returned an error: (404) Not Found.

ブラウザでまた、同じリクエスト通常はHTMLページを返します。 HttpWebRequestから公開サイトへのリクエストは、常に200ステータスコード(OK)も返します。 要求コードはhereです。

ブラウザのリクエストからすべてのヘッダーとCookieを追加しようとしましたが、それは役に立ちませんでした。また、ローカルインスタンスをデバッグしようとしましたが、リクエスト実行中に例外がスローされないことがわかりました。

アイデア?

+2

404は、デフォルトのWebサイト(index.html)のように、サーバーに要求されたものが存在しないことを意味します...単純な 'WebClient w = new WebClient();文字列s = w.DownloadString( "http://myserver.com"); ' –

+4

あなたは好奇心のために、あなた自身の質問にしっかりした賞金をかけてきました。*答えの1つ以上は、模範的であり、追加賞金。ただ1つの答えがあるので、それは「典型的な」ものでなければなりませんが、あなたはそれを受け入れなかったし、さらにはそれを上書きしました。奇妙な。 –

+2

作業中と失敗した試行の両方の通信を取得するには、フィドラーを使用します。これが完了したら、通常何を変更する必要があるかを伝えることができます。 –

答えて

4

WebExceptionは、それが何であるかを必ずしも伝えなくても何か問題が生じたことを伝える一般的な方法です。

実際に問題が発生した理由を取得するには、catchブロック内の応答を読み取る必要があります。サーバーが詳細を示します。

alredayを使用していない場合は、Try Catch Blockを使用してください。

3

404は一般的な方法です。

: - あなたのリンクでの回答で提供されているコード( https://stackoverflow.com/a/16642279/571203)はエラー処理を行わない、これはあなたが盲目的にstackoverflowのからのコードをコピーしたときにトラブルに取得する方法の華麗な例です:)

エラー処理にコードを修正は次のようになります。

string urlAddress = "http://google.com/rrr"; 

var request = (HttpWebRequest)WebRequest.Create(urlAddress); 
string data = null; 
string errorData = null; 
try 
{ 
    using (var response = (HttpWebResponse)request.GetResponse()) 
    { 
    data = ReadResponse(response); 
    } 
} 
catch (WebException exception) 
{ 
    using (var response = (HttpWebResponse)exception.Response) 
    { 
    errorData = ReadResponse(response); 
    } 
} 

static string ReadResponse(HttpWebResponse response) 
{ 
    if (response.CharacterSet == null) 
    { 
    using (var reader = new StreamReader(response.GetResponseStream())) 
    { 
     return reader.ReadToEnd(); 
    } 
    } 
    using (var reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(response.CharacterSet))) 
    { 
    return reader.ReadToEnd(); 
    } 
} 

したがって、例外がある場合は、ステータスコードだけでなく、サーバからの応答全体がerrorData変数になります。

チェックするべきことの1つは、プロキシです。ブラウザは、サーバークライアントがnoneを使用している間にhttpプロキシを使用できます。

関連する問題