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 调用
我使用此代码上传 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>)
.