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

Я могу получать числа с помощью перечисления, как предлагает 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 ). Пожалуйста помоги.


person aditya    schedule 18.06.2013    source источник


Ответы (1)


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

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

Образец:

var request =  (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "HEAD";
request.AllowAutoRedirect = false;
person Alexei Levenkov    schedule 18.06.2013
comment
Спасибо, Алексей! Однако, поскольку HttpWebRequest.Create () возвращает объект WebRequest, у него нет метода AllowAutoRedirect. Чтобы он заработал, он должен иметь приведение типа (HttpWebRequest), чтобы это был объект HttpWebRequest. Следовательно, код выглядит следующим образом: var request = (HttpWebRequest) HttpWebRequest.Create (url); - person aditya; 19.06.2013
comment
(РЕДАКТИРОВАТЬ: этот комментарий предназначен для другого инструмента, но использует аналогичный код). Я хочу проверить PR Google для определенного домена, но когда я ввожу URL-адрес, например facebook.com, я перенаправляюсь на facebook.com/unsupportedbrowser. Я фактически добавил условие, что если это перенаправление (301 или 302), то чтобы не отображать PR, а показывать сообщение, подобное тому, как оно отображается на http://tools.tipscow.com/check-google-page-rank/?http://www.facebook.com. Какие-либо предложения? - person aditya; 19.06.2013
comment
Большое спасибо. Это спасло мне день. - person Leo; 13.08.2013
comment
Примечание для будущих путешественников. .NET Core игнорирует AllowAutoRedirect, если вы получаете перенаправление с HTTPS на HTTP, вместо этого он генерирует исключение. - person richardtallent; 20.08.2020
comment
Меня перенаправили с http на http в основном приложении, и я тоже получаю исключение. Какое решение? - person Boppity Bop; 25.01.2021