Usando o HttpClient, como eu evitaria redirecionamentos automáticos e obteria o código de status original e o URL irreversível no caso de 301 [duplicados]
Esta questão já tem uma resposta aqui:
Como se configura o HttpClient para não redirecionar automaticamente quando recebe um Código de Status HTTP 301? 1 respostaEu tenho o seguinte método que retorna oHttp status code
de um dadoUrl
:
public static async void makeRequest(int row, string url)
{
string result;
Stopwatch sw = new Stopwatch(); sw.Start();
try
{
using (HttpClient client = new HttpClient())
{
HttpResponseMessage response = new HttpResponseMessage();
response = await client.GetAsync(url);
// dump contents of header
Console.WriteLine(response.Headers.ToString());
if (response.IsSuccessStatusCode)
{
result = ((int)response.StatusCode).ToString();
}
else
{
result = ((int)response.StatusCode).ToString();
}
}
}
catch (HttpRequestException hre)
{
result = "Server unreachable";
}
sw.Stop();
long time = sw.ElapsedTicks / (Stopwatch.Frequency / (1000L * 1000L));
requestComplete(row, url, result, time);
}
Funciona bem para200
/404
etc, no entanto, no caso de301
códigos Eu acredito que o resultado retornado é ojá redirecionado (200
), em vez do real301
que deve ser retornado e que teria um cabeçalho contendo para onde o redirecionamento seria apontado.
Eu tenho visto algo assim em outras classes .Net web solicita e a técnica que havia para definir algum tipo deallowAutoRedirect
propriedade para false. Se isso está ao longo das linhas corretas, alguém pode me dizer a alternativa correta para oHttpClient
classe?
Esta postagem contém informações sobre o conceito allowAutoRedirect acima.
Senão, como posso obter esse método para retornar301s
ao invés de200s
para Urls eu sei ser genuíno301s
?