web-dev-qa-db-ja.com

System.Net.Http.HttpClientが302リダイレクトに従わないようにするにはどうすればよいですか?

NuGetのHttpClient を使用します。

アプリはclient.PostAsync()で投稿を送信します。 302リダイレクトに従わないようにしたいと思います。

どうやって?

この回答 で説明されているように、AllowAutoRedirectを設定できると思います。

しかし、PostAsync()呼び出し内で使用されるHttpWebRequestを取得するにはどうすればよいですか?

25
Cheeso

HttpClientコンストラクターのオーバーロードの1つは、WebRequestHandler引数を取ります。 HttpClientクラスは、このWebRequestHandlerを使用してリクエストを送信します。

WebRequestHandlerクラスは、リダイレクト動作を構成するためのAllowAutoRedirectというプロパティを提供します。このプロパティをfalseに設定すると、リダイレクト応答に従わないようにHttpClientに指示します。

これが小さなコードサンプルです:

WebRequestHandler webRequestHandler = new WebRequestHandler();

webRequestHandler.AllowAutoRedirect = false;

HttpClient httpClient = new HttpClient(webRequestHandler);

// Send a request using GetAsync or PostAsync

Task<HttpResponseMessage> response = httpClient.GetAsync("http://www.google.com");
39
Hans

ハンスの答えに追加するには:

WebRequestHandlerはHttpClientHandlerから派生しますが、通常は完全な.NETでのみ使用可能なプロパティを追加します。 WebRequestHandlerはSystem.Net.Http DLLではなく、System.Net.Http.WebRequest DLLに含まれているため、明示的に次のように含める必要があります。表示するための参照。それ以外の場合は表示されません。

新しいDLLを追加したくない場合は、HttpClientHandlerを使用できます。

    HttpClientHandler clientHandler = new HttpClientHandler();
    clientHandler.AllowAutoRedirect = false;

参照: https://blogs.msdn.Microsoft.com/henrikn/2012/08/07/httpclient-httpclienthandler-and-webrequesthandler-explained/

8
rothschild86