Код состояния 301 не отображается правильно в C#

Я могу получить числа с enum, как это было предложено dtb в разделе Получение кода статуса Http (200, 301, 404 и т. Д.) Из HttpWebRequest и HttpWebResponse. Тем не менее, для постоянно перемещенного сайта я также получаю 200 (ОК). Вместо этого я хочу увидеть 301. Пожалуйста помоги. Мой код ниже. Что может быть не так / необходимо исправить?

 public int GetHeaders(string url)
{
    //HttpStatusCode result = default(HttpStatusCode);
    int result = 0;
    var request = HttpWebRequest.Create(url);
    request.Method = "HEAD";
    try
    {
        using (var response = request.GetResponse() as HttpWebResponse)
        {
            if (response != null)
            {
                result = (int)response.StatusCode; // response.StatusCode;
                response.Close();
            }
        }
    }
    catch (WebException we)
    {
        if (we.Response != null)
        {
            result = (int)((HttpWebResponse)we.Response).StatusCode;
        }

    }

    return result;
}

Инструмент, в котором я использую этот код, способен отображать 404, а не существующие домены, но игнорирует перенаправления и показывает сведения о перенаправленном URL. Например, если я поместил свой старый домен easytipsandtricks.com в текстовое поле, он показывает результаты для tipscow.com (если вы проверите easytipsandtricks.com в любом онлайн-инструменте проверки, вы заметите, что он дает правильное сообщение о перенаправлении - 301 Moved). Пожалуйста помоги.

1 ответ

Решение

Вам нужно установить HttpWebRequest.AllowAutoRedirect в false (по умолчанию true) чтобы он не следовал автоматически за перенаправлениями (30x ответов).

Если для параметра AllowAutoRedirect установлено значение false, все ответы с кодом состояния HTTP от 300 до 399 возвращаются приложению.

Образец:

var request =  (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "HEAD";
request.AllowAutoRedirect = false;
Другие вопросы по тегам