2010-03-29 50 views
8

我想,以確定是否對http://www.accreditedqualifications.org.uk 形式存在資格:C#檢測頁面重定向

http://www.accreditedqualifications.org.uk/qualification/50084811.seo.aspx

50084811進行資格目的由最終用戶輸入。

如果他們輸入無效的例如

http://www.accreditedqualifications.org.uk/qualification/50084911.seo.aspx

他們將被重定向到一個錯誤頁面(不正確的HTTP頭,據我可以看到)。有沒有辦法在C#中檢測重定向。我希望能夠檢測到http頭中的重定向(認爲它會發出2)或類似的反對必須下載整個頁面。這可能會發生很多,所以我想盡量減少流量。

編輯

用它來看看頭看起來像兩個是一個無效頁面發出:

http://pageheaders.com/display-http-headers.php?url=http%3A%2F%2Fwww.accreditedqualifications.org.uk%2Fqualification%2F50084911.seo.aspx&agent=ie6

回答

12

最簡單的方法可能是使用來獲取內容HEAD請求(將Method設置爲「HEAD」)的HttpWebRequest設置爲AllowAutoRedirect爲false。我不記得那是否會導致異常,但無論如何應該很容易處理。

+0

發現這個http://stackoverflow.com/questions/924679/c-how-can-i-check-if-a-url-exists-is-valid我認爲它沿着正確的路線,但因爲是該網站不發出404或類似的不工作。我會繼續嘗試。 – PeteT 2010-03-29 15:07:56

+0

@ petebob796:使用'WebClient'可能無法給您足夠的控制權。特別是,它不允許你關閉自動重定向(據我所知)。使用HttpWebRequest並查看響應代碼。 301和302是正常的重定向響應碼。 – 2010-03-29 15:25:03

+0

感謝現在使用HttpWebRequest和HttpWebResponse隨request.AllowAutoRedirect = false;和request.Method =「HEAD」;. 對於其他讀者,我被StatusCode抓住了一秒鐘,它返回「OK」,「NOT FOUND」...但它是一個枚舉,可以轉換爲實際的錯誤301,302 ... – PeteT 2010-03-29 15:57:10

0

您只能使用服務器上的Web客戶端來執行此操作。如果您將鏈接提供給您的客戶,那麼之後您將不會參與他與認證的qualificationsweb服務器之間的通信,因此您將無法獲取該鏈接已重定向到錯誤的信息。

就我所能理解的項目而言,我會使用我的服務器上的Webclient(或曾經的)進行一些調用,以確保存在限定條件並將結果存儲在數據庫中的緩衝時間。這將允許不要打太多的電話,並獲得可靠的信息。

+0

這實際上是一個winforms項目,而不是asp.net我只需要驗證他們輸入的目標是否基於它在網站上的有效性。 – PeteT 2010-03-29 15:15:00

10

有許多不同的代碼可以返回。你可以查看各種代碼一拉:

response.StatusCode == HttpStatusCode.Redirect 

您可以在http://msdn.microsoft.com/en-us/library/system.net.httpstatuscode.aspx

或者查看所有的可能性,你可能會發現它足以爲您在迴應中的位置是不同的。

var request = (HttpWebRequest)WebRequest.Create(uri); 
request.Method = "HEAD"; 
request.AllowAutoRedirect = false; 

string location; 
using (var response = request.GetResponse() as HttpWebResponse) 
{ 
    location = response.GetResponseHeader("Location"); 
} 
return (location != uri.OriginalString);