您可以通過將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();
}
編輯: 我才意識到,有一個叫上 HttpWebRequest類MaximumAutomaticRedirections屬性。因此,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);
編輯完
希望,這會有所幫助。
http://stackoverflow.com/questions/3404493/httpwebrequest-httpwebresponse-redirect-count(可能是手動是唯一的方式)的可能重複。 – Aaron