Détection d’URL d’image en C # / .NET

Existe-t-il un moyen de détecter une URL d’image, par exemple:

http://mysite.com/image.jpg 

mais avec d’autres formats aussi? J’utilise C # avec .NET 4.0.

Quelque chose comme

 bool isImageUrl(ssortingng URL){ } 

modifier je voulais dire si l’URL pointe vers une image. Par exemple, l’URL

 http://mysite.com/image.jpg 

est une image valide, mais

 http://mysite.com/image 

n’est pas.

Vous pouvez envoyer une requête HTTP à l’URL (à l’aide de HttpWebRequest ) et vérifier si le ContentType renvoyé commence par image/ .

Vous pouvez le détecter en utilisant la méthode HEAD de Http (sans télécharger toute l’image)

 bool IsImageUrl(ssortingng URL) { var req = (HttpWebRequest)HttpWebRequest.Create(URL); req.Method = "HEAD"; using (var resp = req.GetResponse()) { return resp.ContentType.ToLower(CultureInfo.InvariantCulture) .StartsWith("image/"); } } 

Vous pouvez bien sûr simplement vérifier si l’URL se termine par une extension de fichier image connue. Cependant, une méthode plus sûre consiste à télécharger la ressource et à vérifier si le contenu que vous obtenez est réellement une image:

 public static bool IsUrlImage(ssortingng url) { try { var request = WebRequest.Create(url); request.Timeout = 5000; using (var response = request.GetResponse()) { using (var responseStream = response.GetResponseStream()) { if (!response.ContentType.Contains("text/html")) { using (var br = new BinaryReader(responseStream)) { // eg test for a JPEG header here var soi = br.ReadUInt16(); // Start of Image (SOI) marker (FFD8) var jfif = br.ReadUInt16(); // JFIF marker (FFE0) return soi == 0xd8ff && jfif == 0xe0ff; } } } } } catch (WebException ex) { Trace.WriteLine(ex); throw; } return false; } 

Vous pouvez simplement vérifier la chaîne avec .EndsWith () pour chacun des ensembles de chaînes que vous définissez.

Si vous voulez savoir si l’object correspondant à cette URL est en réalité une image, vous devrez effectuer vous-même la requête Web et vérifier l’en-tête HTTP de type de contenu.

Même cela peut être inexact, cependant, en fonction du serveur.