HttpClient.SendAsync перенаправление в Net.Core
Использовал HttpClient.SendAsync в Net.Framework и не получал исключений при встрече с перенаправлением StatusCode 302
А попробовал перейти на Net.Core и HttpClient.SendAsync стал выдавать исключение
Как сделать так, чтобы перенаправление проходило и на Net.Core ?
- Хочу ещё отметить что перенаправление там идёт с
httpsнаhttp
Попробовал, но не помогло:
static readonly HttpClientHandler httpClientHandler = new HttpClientHandler() { AllowAutoRedirect = true };
static readonly HttpClient client = new HttpClient(httpClientHandler);
Правильно ли я понимаю, что на Net.Core мне придётся самому отлавливать StatusCode-ы и в случае перенаправления, ловить Location и самому перенаправляться ?
Или всё таки можно установить какое то свойство и чтобы это не являлось исключением.
UPD 1:
В Net.Framework перенаправление проходит само по себе, т.е. получаю html тело страницы на которую произошло перенаправление.
А Net.Core выдаёт исключение.
HttpResponseMessage response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
UPD 2 - Исключение:
System.Net.Http.HttpRequestException: "Response status code does not indicate success: 302 (Found)."
UPD 3 - Использование целиком
static readonly HttpClientHandler httpClientHandler = new HttpClientHandler() { AllowAutoRedirect = true };
static readonly HttpClient client = new HttpClient(httpClientHandler);
private async Task<string[]> GetHtmlPageAsync(string param1, string url)
{
string[] otvet = new string[2];
using HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url);
request.Headers.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36");
request.Content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("param1", param1),
// и другие
});
using HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
int responseHttpStatusCode = (int)response.StatusCode;
otvet[0] = responseHttpStatusCode.ToString();
otvet[1] = await response.Content.ReadAsStringAsync();
return otvet;
}