检查uri是否有效

时间:2014-08-06 13:44:40

标签: c#

Uri myuri = new Uri("https://buffalousercontent.blob.core.windows.net/371-static/profileimages/full/39398");

这是我的uri,当你点击意味着它接收基于用户的图像某些用户不包含图像时,它会收到错误页面。

如何检查收到的是C#代码中的图像?

6 个答案:

答案 0 :(得分:2)

如果您只想验证网址是否包含图片:

bool ValidateImage(string url)
{
    HttpWebRequest r = (HttpWebRequest)WebRequest.Create(url);

    r.Method = "GET";

    try
    {
        HttpWebResponse resp = (HttpWebResponse)r.GetResponse();

        if (resp.ContentType == "image/jpeg")
        {
            Console.WriteLine("Image retrieved successfully.");
            // Process image
            return true;
        }
        else 
        {
            Console.WriteLine("Unable to retrieve image");
        }
    }
    catch
    {
        Console.WriteLine("Unable to retrieve image.");
    }

    return false;
}

显然,将ContentType检查更改为对您的应用程序有意义的检查。您还可以使用HEAD作为请求方法(如@Chris'答案),如果您只是希望验证内容类型而不是下载整个图像

答案 1 :(得分:1)

如其他答案中所述,您可以查看响应的内容类型,也可以尝试从URI创建图像。

try {
    var client = new WebClient();
    var image = Image.FromStream(client.OpenRead(uri));
}
catch(ArguementException e) {
    // this exception will be thrown if the URI doesn't point to a valid image.
}

答案 2 :(得分:0)

要检查是否有错误,您必须发送请求,然后收到错误或良好的blob。

要发送请求,您可以使用here所述的WebClient

public bool CheckUri(Uri uri){
   using(var client = new WebClient()){

   try{
        client.DownloadFile(uri);
        return true;
    }catch{//error detected
     return false;
   }
  }
 }

答案 3 :(得分:0)

执行httprequest并检查响应内容类型是否等于“image /”。这个功能应该可以做到!

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

答案 4 :(得分:0)

Uri对象本身不知道当你将它用作GET请求的地址时会发生什么。

要检查string是否有效Uri,您可以使用

Uri uri;
bool valid = Uri.TryCreate(stringInput, UriKind.Absolute, out uri);

检查请求的文件类型是什么

using (var client = new HttpClient())
{
    var response = client.GetAsync(uri).Result;

    var contentType = response.Content.Headers.ContentType;
}

答案 5 :(得分:0)

您可以使用Azure客户端API执行此操作。添加对Microsoft.WindowsAzure.StorageClient的引用:

    bool IsBlobJpeg(string blobUri)
    {
        try
        {
            Microsoft.WindowsAzure.StorageClient.CloudBlob blob =
                new CloudBlob(
                    blobUri);
            blob.FetchAttributes();
            return (blob.Properties.ContentType == "image/jpeg");

        }
        catch (StorageClientException ex)
        {
            Console.WriteLine(String.Format("{0} Does not exist", blobUri));
            return false;
        }
    }