Код состояния 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;