Этого можно добиться, установив для AllowAutoRedirect значение false и ответив на коды состояния перенаправления HTTP. Полный список кодов состояния HTTP см. W3C . Вот небольшой пример кода (детали обработки ошибок опущены):
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://americanexpress.com");
webRequest.AllowAutoRedirect = false;
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
int redirCount = 0;
while (webResponse.StatusCode == HttpStatusCode.TemporaryRedirect ||
webResponse.StatusCode == HttpStatusCode.MovedPermanently ||
webResponse.StatusCode == HttpStatusCode.MultipleChoices ||
webResponse.StatusCode == HttpStatusCode.Found ||
webResponse.StatusCode == HttpStatusCode.SeeOther)
{
string location = webResponse.Headers["Location"];
redirCount++;
Console.Out.WriteLine("Redirection location: {0}", location);
webRequest = (HttpWebRequest)WebRequest.Create(location);
webRequest.AllowAutoRedirect = false;
webResponse = (HttpWebResponse)webRequest.GetResponse();
}
EDIT:
Я только что понял, что есть свойство MaximumAutomaticRedirections на
Класс HttpWebRequest. Итак, класс HttpWebRequest должен посчитать количество
перенаправления для обработки максимально разрешенных перенаправлений. Я отладил в
исходный код класса HttpWebRequest и обнаружил приватное поле с именем _AutoRedirections
который считает количество перенаправлений.
Итак, чтобы получить количество перенаправлений, было бы гораздо более простое решение:
public class HttpWebRequestAdapter
{
private readonly HttpWebRequest _request;
public HttpWebRequestAdapter(HttpWebRequest request)
{
_request = request;
}
public int NumberOfRedirects
{
get
{
FieldInfo fi = _request.GetType().GetField("_AutoRedirects", BindingFlags.NonPublic | BindingFlags.Instance);
return (int)fi.GetValue(_request);
}
}
}
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://americanexpress.com");
webRequest.AllowAutoRedirect = true;
webRequest.MaximumAutomaticRedirections = 10;
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
HttpWebRequestAdapter adapter = new HttpWebRequestAdapter(webRequest);
Console.Out.WriteLine(adapter.NumberOfRedirects);
КОНЕЦ РЕДАКТИРОВАНИЯ
Надеюсь, это поможет.