检查uri是否有效

本文关键字:有效 是否 uri 检查 | 更新日期: 2023-09-27 18:16:57

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

这是我的uri,当u点击时表示它接收到基于用户的图像,某些用户不包含图像,此时它接收到错误页面

如何检查接收到的一个是图像或c#代码中的东西?

检查uri是否有效

如果您只是想验证URL是否包含图像:

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的回答),如果你只是寻找验证内容类型,而不是下载整个图像。

正如在其他答案中提到的,您可以查看响应的内容类型,或者您可以尝试从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.
}

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

发送请求,您可以使用WebClient,如下所示:

public bool CheckUri(Uri uri){
   using(var client = new WebClient()){
   try{
        client.DownloadFile(uri);
        return true;
    }catch{//error detected
     return false;
   }
  }
 }

执行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/");
    }
}

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;
}

您可以使用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;
        }
    }