apoc.load.jsonParams 使用 Azure Blob 签名 URL 导致 http 403 错误

apoc.load.jsonParams with Azure Blob signed URL leads to http 403 error

我使用此代码上传 json 文件:

BlobClient blobClient = containerClient.GetBlobClient(fileName);

await using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
    response = await blobClient.UploadAsync(ms, new BlobUploadOptions
    {
        HttpHeaders = new BlobHttpHeaders
        {
            ContentType = "application/json",
            ContentEncoding = "UTF-8"
        }
    });
}

var absoluteUrl = string.Empty;
if (response.GetRawResponse().Status == 201)
{
    // 1 hour valid
    absoluteUrl = blobClient.GenerateSasUri(BlobSasPermissions.Read, DateTimeOffset.Now + TimeSpan.FromMinutes(60)).AbsoluteUri;
}

我可以通过输入签名 URL (absoluteUrl) 在浏览器中完全打开文件,但是在 Neo4J Cypher apoc.load.jsonParams 调用中我得到了一个 http 状态 403 :

CALL apoc.load.jsonParams("https://[ACCOUNTNAME].blob.core.windows.net/[CONTAINER]/[FILE]?sv=2021-04-10&se=2022-03-31T16%3A35%3A29Z&sr=b&sp=r&sig=[SIGNATURE]", null, null) YIELD value AS item

我是不是忘记了什么?

您的问题可能与 Neo4j 再次编码您的 URL 有关。彻底检查 Neo4j 的错误消息并检查例如 %3D 是否被 %253D 替换。如果是这种情况,您必须通过使用例如 Uri.UnescapeDataString(<yourUrl>).

将未转义的 Uri 传递给 apoc 调用