C# 检查URL是否指向Azure Blob

C# 检查URL是否指向Azure Blob,c#,azure,azure-storage,azure-storage-blobs,C#,Azure,Azure Storage,Azure Storage Blobs,如果我有一个随机URL,我如何检查它是否指向Azure中的blob?如果它指向Azure Blob,我可以确保该Blob存在并且我可以访问它。 我尝试了以下方法: 我做了一些测试,但不太令人满意: new CloudBlockBlob(new Uri("http://example.com")) ArgumentException: Invalid blob address 'http://example.com/', missing container information new Clo

如果我有一个随机URL,我如何检查它是否指向Azure中的blob?如果它指向Azure Blob,我可以确保该Blob存在并且我可以访问它。
我尝试了以下方法:

  • 我做了一些测试,但不太令人满意:

    new CloudBlockBlob(new Uri("http://example.com"))
    ArgumentException: Invalid blob address 'http://example.com/', missing container information
    
    new CloudBlockBlob(new Uri("https://example.com/fdh/3746C9A2-533E-4544-A10B-321A8BC40AEA/sample-file.txt")).Exists()
    false
    
    new CloudBlockBlob(new Uri("http://stackoverflow.com/questions/43109843/ways-to-migrate-documents-pdf-forms-from-ms-sharepoint-to-aem")).Exists()
    StorageException: Blob type of the blob reference doesn't match blob type of the blob.
    
    因此,基本上创建
    CloudBlockBlob
    可能会失败,
    存在
    可能会失败或返回
    false

    但这样做感觉不对

  • 我可以检查url是否为
    https://.blob.core.windows.net//*
    ,但我不确定这是否总是正确的

  • 如果我能保证的话。因为不需要HTTP请求,所以我会这样做


    是否有其他(更好的)方法来检查随机URL是否指向Azure中的blob(可能是(Azure存储SDK)框中的某个内容)?

    这不是一个真正优雅的解决方案(阅读,它基本上是一个黑客:D)

    您可以做的一件事是向URL发出
    HEAD
    请求。您需要做的是解析响应头。您需要考虑以下三种情况:

  • URL指向blob存储中的blob,可公开访问
  • URL指向blob存储中的blob,但不能公开访问(容器是私有的)
  • URL不指向blob存储
  • 现在,对Azure Blob存储的每个请求都将有一个名为
    x-ms-request-id
    的响应头,其中包含一个类似GUID的值。您可以使用它来区分URL指向blob存储和URL不指向blob存储的场景。当然,这个检查会失败(这就是为什么如果URL实际返回这个头[一些随机站点决定在响应中包含这个确切的头],那么解决方案更像是一个“黑客”的原因)

    在案例1中,您将返回状态代码200。因为blob是可公开访问的,所以您将获得额外的头。其中一个标题将是
    x-ms-blob-type
    ,可能有3个值:
    BlockBlob
    AppendBlob
    PageBlob


    在第2种情况下,您将返回状态代码404,但您将收到
    x-ms-request-id
    响应头。

    是否将网络请求作为一个选项?是的,当然,任何请求都可以,只要它完成了任务。如果它是一个专用容器和/或您没有指定正确的证书,它也可能失败ok,如果我有一个指向Azure Blob的URL,我可以确定它存在并且我可以访问它(更新的帖子)。没错,这是一个黑客:-),但无论如何,这是一个有趣的。谢谢。我在过去一年左右使用了这种方法,效果很好。注意,你也可以得到401unauthorized@yonisha我认为,对于blob存储,您永远也无法恢复401状态代码。你能解释一下在什么情况下你会得到401吗?@GauravMantri,对不起,我是说403。使用无效的SAS令牌时,Azure将返回“403服务器无法验证请求。请确保包含签名的授权标头的值格式正确”。使用有效的SAS创建blob url并更改SAS将导致此错误error@yonisha...Yes,403错误肯定会出现在许多情况下。但即使在这种情况下,您也会返回
    x-ms-request-id
    头。