2011-01-21 8 views
0
public void BuildImg() 
{ 
    // The two different images as strings. 
    string url1 = "http://remoteimage.com/image.jpg"; 
    string url2 = "http://remoteimage.com/image2.jpg"; 

    try 
    { 
     // Check to see if url1 exists or not 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url1); 
     request.Credentials = System.Net.CredentialCache.DefaultCredentials; 
     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
     myImg.Visible = true; 
     myImg.ImageUrl = url1; 
    } 
    catch (Exception ex) 
    { 
     // Check to see if url2exists or not 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url2); 
     request.Credentials = System.Net.CredentialCache.DefaultCredentials; 
     HttpWebResponse response; 
     try 
     { 
      response = request.GetResponse() as HttpWebResponse; 
     } 
     catch (WebException exc) 
     { 
      response = exc.Response as HttpWebResponse; 
     } 
     // Set myImg to show if url2 exists 
     myImg.Visible = true; 
     myImg.ImageUrl = url2; 

     // If response returns 404, then hide myImg 
     if (response.StatusCode == HttpStatusCode.NotFound) 
     { 
      myImg.Visible = false; 
     } 

    } 
+1

ここに質問がありますか? – Bryan

+0

結果の型になっていることを確認したら、演算子 'as'ではなく、' case'を使用します。つまり、(HttpWebResponse)request.GetResponse() ' – abatishchev

+1

これは質問ですか? – Oded

答えて

1
var arr = new[] 
{ 
    "http://example.com/image.jpg", 
    "http://example.com/image2.jpg" 
    ... 
}; 

myImg.ImageUrl = arr.FirstOrDefault(i => CheckExistence(i)); 

static bool CheckUrlExistence(string url) 
{ 
    try 
    { 
     var request = (HttpWebRequest)WebRequest.Create(url); 
     request.Credentials = CredentialCache.DefaultCredentials; 
     request.Method = "HEAD"; 
     var response = (HttpWebResponse)request.GetResponse(); 
     return response.StatusCode == HttpStatusCode.OK; 
    } 
    catch (Exception ex) 
    { 
     var code = ((HttpWebResponse)((WebException)ex).Response).StatusCode; // NotFound, etc 
     return false; 
    } 
+0

1.存在しないページは例外にならず、むしろ404エラーコードで応答します。 2.それがスローされたとしても、すべての例外をキャッチすることは、ページが存在しないことを意味すると仮定するとかなり悪いフォームです。 –

+0

@Paul:同意します。私はOPのコードを書き直しました。私の編集を参照してください - あなたはどう思いますか? – abatishchev

+3

ウェブリソースの存在をテストするために私が考えることができる最良の方法は、HEADリクエストを作成することです。そうすれば、リソースをダウンロードするために価格を支払うことなくリソースの存在を確認できます。 'WebRequest.Method'を「HEAD」に設定することでHEAD要求を行うことができます - 404の応答はそれが存在しないことを示します。 (「HEAD」メソッドがWebサーバによってサポートされていない場合は、おそらく「GET」へのフォールバックを扱うべきです) –

関連する問題