2012-01-26 65 views
0

私は異なるURLから画像を取得するためにasp:imageフィールドを使用しています。 imageurlを使ってリモートウェブサイト(例:http://www.google.com/favicon.ico)からイメージ文字列を設定すると、イメージが存在するかどうかをどのように確認できますか?画像のUrlが有効であることを意味します。asp:画像表示画像

答えて

0

Uri.TryCreate methodを使用してURIが有効かどうかを検証できます。

イメージがASP.Netアプリケーションに存在するかどうかを確認しないでください。画像をダウンロードするのはブラウザの仕事です。 this questionで説明されているように、javascriptを追加すると、ブラウザが欠落している画像をデフォルト画像に置き換えることができます。

0

これは、asp:Imageコントロールだけを使用して行うことはできません。しかし、少し余分な作業があれば、ASHXハンドラを使用して、イメージ(例えば、クエースリング上のイメージを使用)にプログラム的にHttpRequestを作ることは可能です。 HttpRequestが成功した場合、イメージをレスポンスにストリームすることができます。

HttpRequestが404ステータスを返す場合は、代わりに別の定義済みイメージを送信できます。

しかし、これはナットをクラックさせるようなものであり、サイト全体に広範囲に使用しないでください。重大な負荷がかかる可能性があります。ユーザーのブラウザではなくサーバーにダウンロードを依頼しています。画像。また、慎重に実装されていないと、XSSの潜在的なセキュリティリスクになる可能性があります。

具体的には、実際に要求されたイメージをローカルに保持する必要がある場合は特にそうです。要求されたすべてのイメージは、将来の要求が以前に保持されたイメージに役立つようにディスクに書き込まれる必要があります。

明らかに、Javascriptも解決策ですが、私は上記のことを要件に応じて考えています。

0
class MyClient : WebClient 
{ 
    public bool HeadOnly { get; set; } 
    protected override WebRequest GetWebRequest(Uri address) 
    { 
     WebRequest req = base.GetWebRequest(address); 
     if (HeadOnly && req.Method == "GET") 
     { 
      req.Method = "HEAD"; 
     } 
     return req; 
    } 
} 


private bool headOnly; 
public bool HeadOnly { 
    get {return headOnly;} 
    set {headOnly = value;} 
} 


using(var client = new MyClient()) { 
    client.HeadOnly = true; 
    // fine, no content downloaded 
    string s1 = client.DownloadString("http://google.com"); 
    // throws 404 
    string s2 = client.DownloadString("http://google.com/silly"); 
} 

これを試してみてください!