アプリケーションを.netフレームワークから.netコア2.0にアップグレードしています。
その中で、HttpWebRequest
を使用して、AllowAutoRedirect
をfalseに設定したサイトに接続します。コードが実行されると、request.GetResponse()
サイトは302応答を返します。これは、.netフレームワークでは問題ありません。応答を受け取って処理できます(set-cookie
ヘッダー値の後にあります)。
ただし、.net Core 2.0では、WebExceptionがスローされます。
The remote server returned an error: (302) Found.
AllowAutoRedirectがfalseに設定されている場合でも、302が例外をスローするという点で、私の理解は正しくありませんか? .netフレームワークで経験したのと同じ動作をトリガーする方法はありますか?
AllowAutoRedirect
をfalse
に設定したときに同じエラーが発生しました。 _try-catch
_-ブロックをrequest.GetResponse()
でラップし、例外の結果を変数に割り当てるだけで、問題を解決しました。
_WebResponse response;
try {
response = request.GetResponse();
}
catch(WebException e)) {
if(e.Message.Contains("302")
response = e.Result;
}
_
この問題を見てください 。NET Core 2.0のHttpWebRequestは301を永続的に移動します 。要するに、それは言う:
AllowAutoRedirect
を設定すると、リダイレクトに従わなくなることになります。つまり、301応答で終わることを意味します。
HttpWebRequest
(HttpClient
とは異なり)は、失敗した(200以外の)ステータスコードに対して例外をスローします。したがって、例外(おそらくWebException
)を取得することが期待されます。したがって、そのリダイレクト(HTTPS-> HTTP)を処理する必要がある場合は、try/catchブロックにトラップし、
WebException
などを検査する必要があります。これはHttpWebRequest
。そのため、開発者は使用パターンが簡単な
HttpClient
を使用することをお勧めします。