web-dev-qa-db-ja.com

.NET Core2.0のHttpWebRequestが302FoundExceptionをスローします

アプリケーションを.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フレームワークで経験したのと同じ動作をトリガーする方法はありますか?

12
DenverCoder9

AllowAutoRedirectfalseに設定したときに同じエラーが発生しました。 _try-catch_-ブロックをrequest.GetResponse()でラップし、例外の結果を変数に割り当てるだけで、問題を解決しました。

_WebResponse response;
try {
   response = request.GetResponse();
}
catch(WebException e)) {
   if(e.Message.Contains("302")
      response = e.Result;
}
_
8
tobias231h

この問題を見てください 。NET Core 2.0のHttpWebRequestは301を永続的に移動します 。要するに、それは言う:

AllowAutoRedirectを設定すると、リダイレクトに従わなくなることになります。つまり、301応答で終わることを意味します。

HttpWebRequestHttpClientとは異なり)は、失敗した(200以外の)ステータスコードに対して例外をスローします。したがって、例外(おそらくWebException)を取得することが期待されます。

したがって、そのリダイレクト(HTTPS-> HTTP)を処理する必要がある場合は、try/catchブロックにトラップし、WebExceptionなどを検査する必要があります。これはHttpWebRequest

そのため、開発者は使用パターンが簡単なHttpClientを使用することをお勧めします。

2
anatol