2015-05-13 52 views
0

我有圖片url,我需要檢查url是否響應。 例如:下面我寫了三個圖片的url,前兩個url無效,只有第三個url有效。但第二個和第四個url的回覆是有效的圖片 但沒有圖片。在asp.net中進行Url驗證

http://media.expedia.com/hotels/1000000/90000/84900/84853/84853_744_b.jpg

http://www.iceportal.com/brochures/media/show.aspx?brochureid=ICE19044&did=3073&mtype=3073&type=pic&lang=en&publicid=4175749&resizing=X

http://images.trvl-media.com/hotels/1000000/30000/20400/20313/20313_166_b.jpg

http://www.iceportal.com/brochures/ice/ErrorPages/404.htm?aspxerrorpath=/brochures/media/show_A.aspx

這裏是我的代碼:

public static bool CheckUrlExists(string url) 
{ 
     try 
     { 
     Uri u = new Uri(url); 
     WebRequest w = WebRequest.Create(u); 
     w.Method = WebRequestMethods.Http.Head; 
     using (StreamReader s = new StreamReader(w.GetResponse().GetResponseStream())) 
     {     
      return (s.ReadToEnd().Length >= 0); 
     } 
     } 
     catch 
     { 
      return false; 
     } 
    } 

與此代碼我正在確認只有那些網址whic h顯示404錯誤,但不顯示「對不起,請求的小冊子暫時未發佈」或任何其他類型的信息。

回答

1

您將需要一個更復雜的邏輯來驗證URL是否指向圖像。如果服務器缺少資源或者資源不可用,則可能會收到類似臭名昭着的404之類的HTTP錯誤,該錯誤將觸發WebException。但是,這只是故事的一部分。

您的第二個URL返回HTTP 200,確認資源在實際存在資源時丟失。你真正得到的是一個解釋資源的HTML文檔不可用。這是不好的做法,但不是沒有例子。

至少應該檢查您測試的資源的MIME類型(Content-Type標頭,請參閱WebResponse.ContentType)。內容類型image/*建議使用圖像類型資源。無法檢測到已知的MIME類型(例如,如果您收到application/octet-stream),實際上HTTP GET可以獲取資源並對下載的內容運行圖像類型檢測。

+0

非常感謝你,我解決了我的問題。通過使用WebResponse.ContentType我解決了我的問題。謝謝 – user3810961

+0

@ user3810961:如果我能幫忙,我很高興。 – PeterK

0

我會建議使用HttpWebRequest和HttpWebResponse來做到這一點,它們是WebRequest和WebResponse的子類,因此對於你要實現的內容更加細化。以下代碼適用於提供的示例URIs

public static bool CheckUrlExists(string url) 
    { 
     try 
     { 
      Uri u = new Uri(url); 
      HttpWebRequest w = (HttpWebRequest)WebRequest.Create(u); 
      w.AllowAutoRedirect = false; 
      w.Method = WebRequestMethods.Http.Head; 

      HttpWebResponse response = (HttpWebResponse)w.GetResponse(); 

      return response.StatusCode == HttpStatusCode.OK; //Check http status code 
     } 
     catch(WebException ex) 
     { 
      return false; 
     } 
    } 

這裏重要的是我正在檢查HttpStatus代碼。你會抓到404s,但問題的URI最終會導致200(OK)。通過將AllowAutoRedirect設置爲false,HttpWebRequest實例將返回302(重定向)狀態碼,而不是按照重定向到「對不起,請求的小冊子暫時未發佈」。正在返回200的頁面(OK)。這應該是你的目的。

另外:捕獲WebException將允許您檢查狀態代碼(400 +,500 +等)。

但請注意,您可能會被重定向到您請求的圖片的新位置。考慮到你可能想使用PeterK的mime類型檢查。

相關問題